2010-07-21 16 views
5

Come si esegue un altro .exe da VB.NET ma come un altro utente?Come si esegue un altro .exe da VB.NET come un altro utente?

Mi aspetto di avviare un file .exe come "Clic sinistro -> Esegui come -> Inserisci utente/Pass -> Fai clic su OK" Se lo faccio, la mia applicazione viene eseguita come previsto (ho bisogno di eseguirlo come un altro utente per ottenere l'accesso ad alcune cartelle nella rete)

ma se io uso questo in VB.NET System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)

l'applicazione viene eseguita con l'altro utente .. ma Excel (dentro la mia app con Interop) non riesce ad aprire il file nella cartella riservata.

(ho eseguito di nuovo la stessa applicazione, ma con un altro utente, proprio per evitare di creare più file .exe ... ma ho già provato con VBScript)

Anche in questo caso, Process.Start non riesce ad aprire Excel utilizzando la altro utente ... ma clic sinistro -> Esegui come succede in quel ... perché ?? un altro modo??

questo è ciò che l'applicazione fa:

  1. Aprire l'applicazione
  2. verificare se c'è un parametro
  3. se nessun parametro, quindi rilanciare l'applicazione con l'altro utente e inviare alcuni parametri
  4. se c'è un parametro aperto eccellere
  5. aprire un file xlsx

ma se faccio doppio clic ... Excel apre ... utilizza CPU al 50% e mi dà l'errore che non può aprire il file ...

se lo eseguo direttamente con l'utente desiderato e passare ... tutto va bene Qualche suggerimento su come risolvere questo? (impersonare funziona bene .. ma apre Excel con l'utente effettivo .. non quello con i diritti)

Grazie!

risposta

0

Questo è davvero interessante. Per impostazione predefinita, credo che i componenti COM di Excel siano impostati per l'esecuzione come Interactive User (ovvero l'utente ha effettuato l'accesso alla casella). Se sono configured to run come Launching User, la rappresentazione dovrebbe funzionare. Ovviamente, questo non spiega perché "Esegui come ..." funzioni (non conosco la meccanica di quello che forse non è impersonificazione).

Un'idea è di ristrutturare l'applicazione per copiare i file in una posizione che Excel può accedere, manipolarli e quindi copiare il retro.

+0

scusate ... Ho abbandonato il progetto: P ma penso che questa sarebbe stata la soluzione – figus

1

Se si ottiene "handle non valido" l'errore, si dovrebbe provare qualcosa di simile:

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 

Specificando uno qualsiasi dei RedirectStandardOutput = true, RedirectStandardError = true, o RedirectStandardInput = true fa sì che il processo di essere avviato con STARTF_USESTDHANDLES. Se il tuo processo non ha nessuno di questi handle, allora CreateProcessWithLogon fallirà con "Handle non valido".

È necessario reindirizzare (anche se non si intende scrivere nulla ad esso).

Saluti

Problemi correlati