从System.Diagnostics.Process调用dism.exe失败

Siv*_*sam 10 c# system.diagnostics visual-studio windows-server-2008-r2

为了在Windows 2008 R2 Server(64位)中启用Microsoft-Hyper-V和Microsoft-Hyper-V-Management,我将dism.exe作为进程调用.我用过的命令是

Dism.exe/online/Get-FeatureInfo/FeatureName:Microsoft-Hyper-V

Dism.exe/online/Get-FeatureInfo/FeatureName:Microsoft-Hyper-V-Management-Clients

当我从命令行执行此操作时,这可以正常工作,但当我尝试通过我的代码执行它时,它会失败.我在C:\ Windows\SysWoW64文件夹下尝试过64位版本的Dism.exe,但它也失败了.这是我收到的错误消息,

您无法使用32位版本的DISM为正在运行的64位操作系统提供服务.请使用与您的计算机体系结构相对应的DISM版本.

我在这里错过了什么?

更新:SLaks是对的,但问题是默认情况下MS Visual Studio express版本的目标是x86,我必须在.csproj文件中手动编辑到AnyCPU以使其工作.

SLa*_*aks 26

因为您在32位进程中运行,所以您将被重定向到32位版本SysWoW64

运行%WINDIR%\SysNative\dism.exe以防止重定向.

  • C:\Windows\SysNative 文件夹仅对 32 位进程可见。 (2认同)

小智 5

在批处理文件中创建以下内容,例如 RunDism.bat

%WINDIR%\SysNative\dism.exe
Run Code Online (Sandbox Code Playgroud)

在程序中调用批处理文件。SysNative 不是一个真正的文件夹,所以你不能在你的程序中直接调用上面的代码,它必须由系统调用。这种方式对我有用。