【问题标题】:Error using Process.Start()使用 Process.Start() 时出错
【发布时间】:2013-12-20 16:46:39
【问题描述】:

我正在尝试从 vb.net 应用程序运行 sysprep,即使确认路径和文件名正确,它也会返回找不到文件。我尝试使用 process.start,声明为新进程,声明路径与文件名分开。这是我希望编写的代码,也许有人可以尝试一下,看看他们是否提出了解决方案?

Private Sub btnsysp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsysp.Click
    Dim P As New System.Diagnostics.Process()
    P.StartInfo.UseShellExecute = True
    P.StartInfo.WorkingDirectory = "C:\Windows\System32\sysprep\"
    P.StartInfo.FileName = "sysprep.exe"
    P.Start()
End Sub

【问题讨论】:

  • 权限问题?如果您将所有内容移出 C:\WINDOWS\SYSTEM32 ?
  • 将项目上的 Target CPU 设置更改为 AnyCPU,这样您就不会被重定向到 c:\windows\syswow64。哪个没有 sysprep.exe

标签: vb.net filepath process.start working-directory win32exception


【解决方案1】:

我想你只是偶然发现了http://msdn.microsoft.com/en-us/library/aa384187.aspx

%windir%\System32 目录是为 64 位应用程序保留的。大多数 DLL 文件名在创建 64 位版本的 DLL 时没有改变,因此 32 位版本的 DLL 存储在不同的目录中。 WOW64 通过使用文件系统重定向器隐藏了这种差异。

您的启动请求(来自 32 位进程)被重定向到 %windir%\SysWOW64\sysprep\sysprep.exe。由于 SysWOW64 上没有此特定可执行文件的 32 位版本,因此启动失败。

绕过此问题的最简单方法是使用 %windir%\SysNative\sysprep\sysprep.exe 引用而不是 %windir%\System32\sysprep\sysprep.exe,这就是您所拥有的。

【讨论】:

  • 谢谢!我使用了 sysnative 路径并且有效。也感谢很好的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多