2010-07-21 84 views
5

如何從VB.NET運行另一個.exe,但作爲另一個用戶?如何以另一個用戶身份從VB.NET運行另一個.exe文件?

我希望啓動一個類似於「左鍵單擊 - >運行 - >輸入用戶/密碼 - >單擊確定」.exe如果我這樣做,我的應用程序按預期運行(我需要運行它作爲另一個用戶以訪問某些文件夾在網絡中)

但是,如果我用這個在VB.NET System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)

應用程序與其他用戶運行..但Excel文件(我的應用程序互操作中)無法打開該文件在受限制的文件夾中。

(我再次運行相同的應用程序,但使用不同的用戶,只是爲了避免創造更多的.exe文件...但我已經使用VBScript試過)

同樣,失敗的Process.Start使用Excel中打開其他用戶...但左鍵單擊 - >作爲成功運行...爲什麼?其他方式??

這是應用程序做什麼:

  1. 打開應用
  2. 檢查,如果有一個參數
  3. 如果沒有參數,然後重新啓動與其他用戶的應用程序,併發送一些參數
  4. 如果有參數打開excel
  5. 打開一個xlsx文件

但如果我雙擊... Excel打開...使用50%的CPU,並給我錯誤,它無法打開文件...

如果我直接與所需的用戶運行它,通過......一切都很好執行 任何建議如何解決這個問題? (impersonate工作正常..但它打開Excel與實際用戶..不是有權利的人)

謝謝!

回答

0

這真的很有意思。默認情況下,我相信Excel COM組件設置爲以Interactive User(即用戶登錄框)運行。如果他們是configured to run作爲Launching User那麼模仿應該工作。當然,這並不能解釋爲什麼「Run As ...」有效(我不知道它的機制,所以它可能不是模仿)。

一個想法是重構應用程序以將文件複製到某個位置,Excel可以訪問,操作它們,然後複製它們。

+0

對不起...我放棄了項目:P,但我認爲這將是解決方案 – figus 2010-08-04 23:29:33

1

如果你得到 「句柄無效」 的錯誤,你應該嘗試這樣的事:

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 

指定 RedirectStandardOutput中的任何一個= TRUE,RedirectStandardError = true,或者RedirectStandardInput =真 使進程通過STARTF_USESTDHANDLES啓動。如果您的進程沒有任何這些句柄,則CreateProcessWithLogon將失敗,並顯示「無效句柄」。

你必須重定向它(即使你不打算寫任何東西)。

Regards

相關問題