你如何从VB.NET运行另一个.exe作为另一个用户?

时间:2010-07-21 20:29:42

标签: vb.net excel interop impersonation

如何从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 ...但是左键单击 - >在那成功运行...为什么?其他方式??

这就是应用程序的作用:

  1. 打开应用
  2. 检查是否有参数
  3. 如果没有参数,则重新启动应用程序与其他用户并发送一些参数
  4. 如果有参数open excel
  5. 打开xlsx文件
  6. 但是,如果我双击... Excel打开...使用50%的CPU,并给我一个错误,它无法打开文件......

    如果我直接与所需用户一起运行并传递...一切正常 有任何建议如何解决这个问题? (模仿工作正常..但它打开Excel与实际用户..而不是有权利的人)

    谢谢!

2 个答案:

答案 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 runLaunching User,那么假冒就应该有效。当然,这并不能解释为什么“Run As ...”有效(我不知道它的机制,所以也许不是模仿)。

一个想法是重组应用程序以将文件复制到Excel可以访问,操作它们然后复制后面的位置。