2015-03-08 3 views
0

Я написал код C#, который должен иметь право администратора. Используя это приложение, я пытаюсь создать приложение Outlook/почтовый элемент, чтобы открыть окно Outlook. Однако Outlook 2013 уже работает без права администратора. Я использую следующий код, но поскольку созданное приложение/почтовый элемент и уже запущенный экземпляр Outlook имеют разные привилегии, он вызывает исключение.Создание приложения Outlook/почтового элемента без права администратора с использованием приложения C#, имеющего администратор privilage

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

Есть в любом случае для создания приложения/почтовый пункт как текущего пользователя, а не администратора (что-то подобное, чтобы запустить процесс как текущего пользователя, предоставляя имя пользователя и пароль текущего пользователя)?

Outlook должен работать без права администратора, чтобы иметь функциональную службу индексирования.

Здесь детали исключение:

System.Runtime.InteropServices.COMException was unhandled 
HResult=-2146959355 
Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). 
Source=mscorlib 
ErrorCode=-2146959355 

ответ

0

Одним из решений, которое я придумал, является выполнение вторичного приложения C# в качестве текущего пользователя путем предоставления имени пользователя и пароля текущего пользователя. Затем это приложение отвечает за создание элемента почты Outlook/приложения и открытия сообщения о создании. Таким образом, уже запущенный Outlook и созданные элементы почты/приложения оба без права администратора.

Я упростил это и даже избежал использования любого дополнительного приложения C#, просто перезапустив свое исходное приложение C#, но без права администратора и передав ему входной аргумент для создания элементов почты Outlook/приложений.

Это, кажется, работает отлично.

2

Нет, если контекст безопасности различны, COM маршалинг будет явно отказываются работать. Это функция безопасности, предназначенная для предотвращения ситуации, когда права безопасности повышаются без явного согласия пользователя.

+1

Да. Он не работает даже с олицетворением (LogonUser + Impersonate) –

0

Вам необходимо запустить Outlook с правами администратора, если вам нужно получить доступ к исполняемому экземпляру из приложения. Контекст безопасности должен соответствовать вашему приложению.

В любом случае, вы можете использовать Exchange Web Services вместо этого. См. EWS Managed API, EWS, and web services in Exchange для получения дополнительной информации. Также вы можете использовать .net BCL для создания и отправки писем.

+0

Как я уже упоминал в своем вопросе, Outlook нужно запускать без полномочий администратора, чтобы его служба индексирования работала должным образом. Было бы очень интересно узнать об этом, хотя! – NESHOM