For enabling Microsoft-Hyper-V and Microsoft-Hyper-V-Management in Windows 2008 R2 Server(64bit), I\'m calling dism.exe as a process. The command I\'ve used is
Because you're running in a 32-bit process, you're getting redirected to the 32-bit version in SysWoW64
Run %WINDIR%\SysNative\dism.exe
to prevent redirection.
I had to use "SysNative\dism.exe" If I added %WINDIR%\ it would fail, I'm using VS2017 installing on Server 2012R2. Tnhx!
The thing is you need to call the appropriate dism.exe
dependng on the system architecture.
As @eric xu said, you need to resolve the path because it is not a real path. Below is the code that works for me. It basically detects the system architecture, resolves the path depending on the architecture and then calls the appropriate 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");
}
Source: File System Redirector
Create below content in a batch file, for example RunDism.bat
%WINDIR%\SysNative\dism.exe
Call the batch file in your program. SysNative is not a real folder, so you cannot call above code in your program directly, it must be call by system. This way is worked for me.