Vb.net 使用Process.Start()时出错

Vb.net 使用Process.Start()时出错,vb.net,filepath,process.start,working-directory,win32exception,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 Ne

我试图从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

我想你只是在路上绊倒了

%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

权限问题?如果您将所有内容移出C:\WINDOWS\SYSTEM32,请将项目上的目标CPU设置更改为AnyCPU,这样您就不会被重定向到C:\WINDOWS\syswow64。没有sysprep。谢谢!我使用了系统本机路径,这很有效。谢谢你的解释。