2010-01-17 30 views
4

Je travaille sur un projet qui nécessite une application sandbox. Je suis capable de créer un utilisateur Windows, de créer un répertoire, de remplir le répertoire avec une application et d'exécuter l'application en tant qu'utilisateur. Cela fonctionne en marche tout à fait bien comme une application de la console, mais quand je l'installe en tant que service, je reçois cette exception:L'exécution du processus en tant qu'utilisateur à partir du service Windows échoue-t-elle lorsque Access est refusé?

System.ComponentModel.Win32Exception: Access is denied 
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) 
at System.Diagnostics.Process.Start() 

Le code qui lance cette exception est:

_process = new Process 
    { 
    StartInfo = 
     { 
      Arguments = "", 
      CreateNoWindow = true, 
      ErrorDialog = false, 
      FileName = instanceDirectory + "program.exe", 
      WorkingDirectory = instanceDirectory, 
      UseShellExecute = false, 


      UserName = GetUserNameForInstance(_id), 
      Password = GetPasswordForInstance(_id), 
      Domain = "" 
     }, 
    EnableRaisingEvents = true 
    }; 

_process.Exited += ProcessExited; 
_process.Start(); 

Encore une fois, cela est seulement lancé lors de l'exécution en tant que service Windows. Le service fonctionne sous LOCAL SYSTEM selon le panneau Services de Windows.

Des idées?

+0

Où est le fichier exécutable situé? – wj32

+0

Je suis confronté exactement au même problème ici. Avez-vous été capable de trouver une solution? – kizzx2

Répondre

1

Il est peut-être préférable d'exécuter le service en tant que compte de domaine disposant des autorisations nécessaires pour les opérations d'E/S (y compris les autorisations ACL).

Dans l'exemple ci-dessous, le service "Alterter" est configuré pour s'exécuter en tant que compte de service local. Dans votre cas, je suggère d'exécuter le service en tant que DOMAIN \ UserAccount.

alt text http://www.windows-xp-services.com/images/propertieslogon.gif

1

Est-ce que le compte contient les informations relatives aux ressources que vous utilisez? A-t-il la capacité de lire et d'écrire dans le répertoire?

Dans ces types de situations 99% du temps c'est un problème de prémission.

+0

L'utilisateur a l'autorisation pour ces ressources et le processus démarre correctement lorsque l'application qui le démarre s'exécute depuis la console. Ma seule supposition est un problème avec le démarrage d'un processus en tant qu'utilisateur différent d'un service. Les seules différences significatives par rapport à l'exécution en tant que service et console sont les autorisations LOCAL SYSTEM du service pendant que la console s'exécute en tant qu'utilisateur actuel. Y at-il une sorte de drapeau avec lequel je devrais commencer le service? – Mike