2010-12-03 40 views
1

J'ai toujours eu l'impression que lorsque vous exécutez un processus comme (domain\user) mydomain\myuser, lors de l'utilisation de Process.Start(), il démarrait ce nouveau processus en utilisant les mêmes informations d'identification - mydomain\myuser. Le problème que je rencontre est que mon appel Process.Start() semble créer un processus sous le compte SYSTÈME qui me cause des problèmes d'autorisation dans le processus démarré (qui doit s'exécuter sous un compte d'administrateur en raison du travail qu'il fait) . Si cela change les choses - je suis engendrant ce processus (un exe construit sur mesure) de dans un installateur de Windows.Process.Start() ne génère pas le nouveau processus sous le même utilisateur

Des suggestions? J'ai lu sur les politiques de groupe Windows (éventuellement) avoir un impact sur cela, mais si je suis honnête, il est perdu pour moi.

EDIT: un petit extrait:

exename et commandLine sont des paramètres pour ce corps de la méthode:

ProcessStartInfo procInfo = new ProcessStartInfo(exeName, commandLine); 
procInfo.WorkingDirectory = workingDirectory; 
procInfo.UseShellExecute = false; 
procInfo.CreateNoWindow = true; 
Process process = Process.Start(procInfo); 
Process.WaitForExit(); 
return process.ExitCode; 
+0

Etes-vous sûr que le code d'origine ne fonctionne pas en tant que 'System'? – CodesInChaos

+0

Oui, 100% sûr. J'ai vérifié ceci de deux manières - l'une utilisant l'exe d'installation que nous avons généré (et en m'assurant que l'utilisateur fonctionne sous moi via le gestionnaire de tâches). Également en exécutant le MSI, nous avons généré, en utilisant msiexec à partir de l'invite de commande et en le forçant à s'exécuter avec des droits d'administration sous mon nom d'utilisateur. Une fois que le fichier process.start() exe est démarré, il montre qu'il est exécuté par 'SYSTEM' dans les deux cas. – Dave

Répondre

3

Définissez procInfo.UseShellExecute sur true ou exécutez cmd en tant que processus avec votre exe en tant que paramètre de la commande cmd. Lorsque UseShellExecute est défini sur false, voici de nombreux effets secondaires intéressants: UseShellExecute

+0

Je vais donner une idée à l'idée du CMD et reprendre contact, merci pour cette suggestion. – Dave

+0

Je suis également confronté à ce problème. J'appelle déjà 'cmd' avec mon exe comme paramètre, et si je veux du tout enregistrer des erreurs (en utilisant' RedirectStandardError', je ne peux pas mettre 'UseShellExecute' à' true'.) Que faire à partir de là? – cidthecoatrack

2

Votre impression est vrai. Process.Start() commencera toujours le nouveau processus sous les informations d'identification de l'utilisateur actuel - sauf si vous fournissez des informations d'identification alternatives dans le ProcessStartInfo ou utilisez l'une des surcharges qui prennent les informations d'identification.

Il doit y avoir un autre problème - partager un extrait de votre code.

MISE À JOUR

OK! Vous n'avez rien mentionné à propos de l'installateur. Tous les programmes d'installation MSI seront exécutés sous le système car ils seront exécutés par "Windows Installer" que vous pouvez vérifier et ils fonctionnent sous SYSTEM.

+0

J'ai ajouté un extrait de ma méthode pour démarrer le processus, mais ce n'est pas spécial (et je n'ai paramétré aucune information d'identification). Merci pour les commentaires jusqu'ici, je serais intéressé d'entendre d'autres pensées que vous avez. – Dave

+0

Est-ce dans ASP.NET? – Aliostad

+0

Certaines parties du projet sont basées sur le Web, mais l'installateur et l'exe ne sont que du code .Net. – Dave