要在Windows 2008 R2 Server(64位)中启用Microsoft-Hyper-V和Microsoft-Hyper-V-Management,我将调用dism.exe作为进程。我使用的命令是
Dism.exe / online / Get-FeatureInfo / FeatureName:微软的Hyper-V
Dism.exe / online / Get-FeatureInfo / FeatureName:微软的Hyper-V-管理的客户端
当我从命令行执行此操作时,这可以正常工作,但是当我尝试通过我的代码执行它时,它会失败。我在C:\ Windows \ SysWoW64文件夹下尝试过64位版本的Dism.exe,但它也失败了。这是我收到的错误消息,
您无法为正在运行的64位服务 具有32位版本的操作系统 DISM。请使用版本 对应于您的DISM 计算机的架构。
我在这里缺少什么?
更新:SLaks是对的,但问题是默认情况下MS Visual Studio express版本的目标是x86,我必须在.csproj文件中手动编辑到AnyCPU以使其正常工作。
答案 0 :(得分:25)
因为您使用的是32位进程,所以getting redirected to the 32-bit version in SysWoW64
运行%WINDIR%\SysNative\dism.exe
以防止重定向。
答案 1 :(得分:4)
在批处理文件中创建以下内容,例如RunDism.bat
%WINDIR%\SysNative\dism.exe
在程序中调用批处理文件。 SysNative不是真正的文件夹,因此您不能直接在程序中调用上面的代码,它必须由系统调用。这种方式对我有用。
答案 2 :(得分:2)
问题是你需要根据系统架构调用适当的dism.exe
。
正如@eric xu所说,你需要解决路径,因为它不是真正的路径。以下是适合我的代码。它基本上检测系统架构,根据体系结构解析路径,然后调用相应的dism.exe
。
string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "dism.exe");
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative", "dism.exe");
}
答案 3 :(得分:0)
我不得不使用“SysNative \ dism.exe” 如果我添加%WINDIR%\它会失败,我在服务器2012R2上使用VS2017安装。 Tnhx!