【问题标题】:process.start() throws win32Exception when credentials are given给出凭据时 process.start() 抛出 win32Exception
【发布时间】:2013-12-18 11:55:31
【问题描述】:

我正在尝试使用 Process.Start() 来启动一个 lnk 文件。不提供凭据时很好,但是当我提供凭据时会引发异常。这是示例代码:

这很好用

var processStartInfo = new ProcessStartInfo
{
    FileName = @"F:\abc.lnk",
};

using (var process = new Process())
{
    process.StartInfo = processStartInfo;
    process.Start();
}

但此代码引发 Win32Exception:'指定的可执行文件不是此 OS 平台的有效应用程序'。

var processStartInfo = new ProcessStartInfo
{
    FileName = @"F:\abc.lnk",
    UserName = userName,
    Password = securePassword,
    Domain = domain,
    UseShellExecute = false,
};

using (var process = new Process())
{
    process.StartInfo = processStartInfo;
    process.Start();
}

我的操作系统是32位的,程序也是

我需要这些凭据,因为文件位于网络驱动器上。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# process credentials win32exception


    【解决方案1】:

    docs 说“当 UseShellExecute 为 false 时,您只能使用 Process 组件启动可执行文件”,因此向它传递一个 .lnk 文件应该会失败。

    这里有类似的问题:Run application via shortcut using Process.Start C#

    【讨论】:

      【解决方案2】:
      Process process = new Process();
      process.StartInfo.FileName = "F:\abc.lnk";
      process.StartInfo.Arguments = "use \\\\computerName\\share password /user:UserName";
      process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      process.StartInfo.UseShellExecute = false;
      process.Start();
      process.WaitForExit();
      process.Dispose();
      

      【讨论】:

      • 我该如何使用它? “使用 \\\\computerName\\share” F 盘在网络上。我假设它是这样的: process.StartInfo.Arguments = "use \\\\computerName\\share /user:";?
      猜你喜欢
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多