Calling dism.exe from System.Diagnostics.Process Fails

前端 未结 4 1295
没有蜡笔的小新
没有蜡笔的小新 2020-12-19 00:33

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

相关标签:
4条回答
  • 2020-12-19 01:08

    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.

    0 讨论(0)
  • 2020-12-19 01:15

    I had to use "SysNative\dism.exe" If I added %WINDIR%\ it would fail, I'm using VS2017 installing on Server 2012R2. Tnhx!

    0 讨论(0)
  • 2020-12-19 01:19

    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

    0 讨论(0)
  • 2020-12-19 01:24

    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.

    0 讨论(0)
提交回复
热议问题