使用Process.Start()时出错

时间:2013-12-20 16:46:40

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

我正在尝试从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

1 个答案:

答案 0 :(得分:0)

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

  

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

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

绕过此问题的最简单方法是使用%windir%\SysNative\sysprep\sysprep.exe而不是%windir%\System32\sysprep\sysprep.exe的引用。