如何从VB.NET运行另一个.exe但是作为另一个用户?
我希望推出一个.exe,例如“左键单击 - >运行方式 - >输入用户/通行证 - >单击确定” 如果我这样做,我的应用程序按预期运行(我需要以另一个用户身份运行它以访问网络中的某些文件夹)
但是如果我在VB.NET中使用它
System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath, PARAMETER, USER, PASSWORD, DOMAIN)
应用程序与其他用户一起运行..但Excel(在我的App with Interop中)无法打开受限文件夹中的文件。
(我再次运行相同的应用程序,但使用不同的用户,只是为了避免创建更多的.exe文件......但我已经尝试过使用vbScript)
再次,Process.Start FAILS使用其他用户打开excel ...但是左键单击 - >在那成功运行...为什么?其他方式??
这就是应用程序的作用:
但是,如果我双击... Excel打开...使用50%的CPU,并给我一个错误,它无法打开文件......
如果我直接与所需用户一起运行并传递...一切正常 有任何建议如何解决这个问题? (模仿工作正常..但它打开Excel与实际用户..而不是有权利的人)
谢谢!
答案 0 :(得分: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 = true 导致使用STARTF_USESTDHANDLES启动进程。如果您的进程没有任何这些句柄,那么CreateProcessWithLogon将失败并显示“Invalid Handle”。
你必须重定向它(即使你不想写任何东西)。
此致
答案 1 :(得分:0)
这真的很有趣。默认情况下,我相信Excel COM组件设置为以Interactive User运行(即用户登录到框中)。如果他们configured to run为Launching User,那么假冒就应该有效。当然,这并不能解释为什么“Run As ...”有效(我不知道它的机制,所以也许不是模仿)。
一个想法是重组应用程序以将文件复制到Excel可以访问,操作它们然后复制后面的位置。