2015-03-08 3 views
0

J'ai écrit un code C# qui doit avoir le droit administrateur. En utilisant cette application, j'essaye de créer une application Outlook/article de courrier afin d'ouvrir une fenêtre de composition de perspectives. Toutefois, Outlook 2013 est déjà en cours d'exécution sans droit d'administrateur. J'utilise le code suivant, mais étant donné que l'élément application/mail créé et l'instance de outlook en cours d'exécution ont des privilèges différents, une exception est générée.Création d'une application/d'un élément de courrier Outlook sans droit d'administrateur à l'aide d'une application C# dotée du privilège d'administrateur

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); 

est-il de toute façon de créer l'élément d'application/mail en tant qu'utilisateur actuel au lieu d'administrateur (quelque chose de similaire à l'exécution d'un processus en tant qu'utilisateur actuel en fournissant le nom d'utilisateur et mot de passe de l'utilisateur actuel)?

Outlook doit être exécuté sans administrateur droit afin d'avoir un service d'indexation fonctionnel.

Voici les détails d'exception:

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 

Répondre

0

Une solution que j'ai trouvée est d'exécuter une application C# secondaire en tant qu'utilisateur actuel en fournissant le nom d'utilisateur et le mot de passe de l'utilisateur actuel. Cette application est alors responsable de la création de l'élément mail/application Outlook et de l'ouverture du message de composition. De cette façon, les éléments Outlook et les éléments de courrier/application créés sont tous deux sans droit d'administrateur. J'ai simplifié encore plus et même évité d'utiliser une application C# secondaire simplement en ré-exécutant mon application C# originale, mais sans droit administrateur et en lui passant l'argument d'entrée pour créer des éléments de courrier/application Outlook.

Cela semble fonctionner parfaitement.

2

Non, si les contextes de sécurité sont différents, COM marshaling refuserait explicitement au travail. Il s'agit d'une fonctionnalité de sécurité conçue pour éviter une situation où les droits de sécurité sont élevés sans un consentement explicite de l'utilisateur.

+1

Oui. Il ne fonctionne pas même avec l'emprunt d'identité (LogonUser + Impersonate) –

0

Vous devez exécuter Outlook avec des privilèges d'administrateur si vous avez besoin d'accéder à une instance en cours d'exécution à partir de votre application. Le contexte de sécurité doit correspondre à votre application.

Quoi qu'il en soit, vous pouvez envisager d'utiliser Exchange Web Services à la place. Voir EWS Managed API, EWS, and web services in Exchange pour plus d'informations. Vous pouvez également utiliser .net BCL pour créer et envoyer des emails.

+0

Comme je l'ai mentionné dans ma question, Outlook doit fonctionner sans privilèges d'administrateur afin que son service d'indexation fonctionne correctement. Il serait très intéressant de savoir comment contourner cela! – NESHOM