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

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

我希望像“左键单击 – >运行 – >input用户/密码 – >单击确定”如果我这样做,我的应用程序运行按预期(我需要运行它作为另一个用户访问一些networking中的文件夹)

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

该应用程序与其他用户一起运行..但Excel(在我的应用程序与Interop)无法在受限制的文件夹中打开该文件。

(我再次运行相同的应用程序,但用不同的用户,只是为了避免创build更多的.exe文件…但我已经尝试过与VBScript)

再次,Process.Start FAILS使用其他用户打开Excel …但左键单击 – >作为成功运行…为什么? 其他方式??

这是应用程序所做的:

  1. 打开应用程序
  2. 检查是否有一个参数
  3. 如果没有参数,则与其他用户重新启动应用程序并发送一些参数
  4. 如果有一个参数打开excel
  5. 打开一个xlsx文件

但如果我双击… Excel打开…使用50%的CPU,并给我的错误,它无法打开文件…

如果我直接运行它与所需的用户,并通过…一切正常执行任何build议如何解决这个问题? (模拟工作正常..但它打开Excel与实际用户..不是有权利的人)

谢谢!

这真的很有趣。 默认情况下,我相信Excel COM组件设置为以交互式用户 (即用户login框)运行。 如果它们被configuration为以启动用户 身份运行 ,则应该使用模拟。 当然,这并不能解释为什么“Run As …”有效(我不知道这个机制,所以也许不是假冒)。

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

如果你得到“处理无效”的错误,你应该尝试这样的事情:

 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将失败,并显示“无效句柄”。

你必须redirect它(即使你不打算写任何东西)。

问候