2010-07-21 11 views
5

Comment exécuter un autre fichier .exe à partir de VB.NET, mais en tant qu'autre utilisateur?Comment exécutez-vous un autre fichier .exe à partir de VB.NET en tant qu'autre utilisateur?

Je m'attends à lancer un .exe comme "Clic gauche -> Exécuter en tant que -> Entrer utilisateur/Passe -> Cliquez sur OK" Si je fais cela, mon application fonctionne comme prévu (je dois l'exécuter comme un autre utilisateur pour obtenir l'accès à certains dossiers dans le réseau)

mais si j'utilise ceci dans VB.NET System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)

l'application fonctionne avec l'autre utilisateur .. mais Excel (dans mon application avec Interop) ne parvient pas à ouvrir le fichier dans le dossier restreint.

(je lance à nouveau la même application mais avec un autre utilisateur, juste pour éviter de créer des fichiers .exe plus ... mais je l'ai déjà essayé avec VBscript)

Encore une fois, Process.Start parvient pas à ouvrir Excel à l'aide du autre utilisateur ... mais clic gauche -> Exécuter comme succède à cela ... pourquoi ?? autrement??

c'est ce que l'application fait:

  1. Ouvrez l'application
  2. vérifier s'il y a un paramètre
  3. si aucun paramètre, relancer ensuite l'application avec l'autre utilisateur et envoyer un paramètre
  4. s'il y a un paramètre ouvert excel
  5. ouvrir un fichier xlsx

mais si je double-clique ... Excel s'ouvre ... utilise 50% CPU, et me donne l'erreur qu'il ne peut pas ouvrir le fichier ...

si je le lance directement avec l'utilisateur désiré et pass ... tout fonctionne bien Des suggestions comment résoudre ce problème? (imiter fonctionne bien .. mais il ouvre Excel avec l'utilisateur réel .. pas celui avec des droits)

Merci!

Répondre

0

Ceci est vraiment intéressant. Par défaut, je crois que les composants COM Excel sont configurés pour s'exécuter en tant que Interactive User (c.-à-d. L'utilisateur s'est connecté à la boîte). Si elles sont configured to run comme Launching User alors l'usurpation d'identité devrait fonctionner. Bien sûr, cela n'explique pas pourquoi "Run As ..." fonctionne (je ne connais pas la mécanique de ça, alors peut-être que ce n'est pas une usurpation d'identité).

Une idée consiste à restructurer l'application pour copier les fichiers dans un emplacement auquel Excel peut accéder, les manipuler, puis copier le dos.

+0

désolé ... J'ai abandonné le projet: P mais je pense que cela aurait été la solution – figus

1

Si vous obtenez "handle est non valide" erreur, vous devriez essayer quelque chose comme ceci:

dim info As New ProcessStartInfo("...") 

info.UseShellExecute = False 

info.RedirectStandardInput = True //This is the key 

info.RedirectStandardError = True //This is the key 

info.RedirectStandardOutput = True //This is the key 

info.UserName = "username" 

info.Password = "password" 

Using (install As Process = Process.Start(info)) 


     Dim output As String = install.StandardOutput.ReadToEnd() 

     install.WaitForExit() 


End Using 

Spécification une des RedirectStandardOutput = true, RedirectStandardError = true, ou RedirectStandardInput = true provoque le processus de être lancé avec STARTF_USESTDHANDLES. Si votre processus n'a aucun de ces handles, alors CreateProcessWithLogon échouera avec "Invalid Handle".

Vous DEVEZ le rediriger (même si vous n'avez pas l'intention de lui écrire quoi que ce soit).

Cordialement