【问题标题】:How do you run another .exe from VB.NET as another User?您如何以另一个用户身份从 VB.NET 运行另一个 .exe?
【发布时间】:2011-03-19 05:27:01
【问题描述】:

您如何以另一个用户身份从 VB.NET 运行另一个 .exe?

我希望启动一个 .exe,例如“左键单击 -> 运行方式 -> 输入用户/密码 -> 单击确定” 如果这样做,我的应用程序将按预期运行(我需要以其他用户身份运行它才能访问网络中的某些文件夹)

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

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

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

再次,Process.Start 无法使用其他用户打开 excel...但是左键单击 -> 运行成功...为什么?另一种方式??

这是应用程序的作用:

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

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

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

谢谢!

【问题讨论】:

    标签: vb.net excel interop impersonation


    【解决方案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 将失败并显示“无效句柄”。

    您必须重定向它(即使您不打算向其写入任何内容)。

    问候

    【讨论】:

      【解决方案2】:

      这真的很有趣。默认情况下,我相信 Excel COM 组件设置为以Interactive User 运行(即用户登录到该框)。如果他们是configured to run 作为Launching User,那么模拟应该可以工作。当然,这并不能解释为什么“Run As...”有效(我不知道它的机制,所以也许它不是模仿)。

      一个想法是重组应用程序,将文件复制到 Excel 可以访问的位置,对其进行操作,然后再复制回来。

      【讨论】:

      • 对不起...我放弃了这个项目:P 但我认为这将是解决方案
      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2015-09-30
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多