Называя систему DISM.exe из системы.Диагностика.Процесс Не

для включения Microsoft-Hyper-V и Microsoft-Hyper-V-Management в Windows 2008 R2 Server(64bit) я вызываю dism.exe как процесс. Команду я использовал это

системы DISM.exe / онлайн /Get-FeatureInfo / FeatureName: Microsoft-Hyper-V

системы DISM.exe / онлайн /Get-FeatureInfo / FeatureName: Microsoft-Hyper-V-Управление-Клиенты

Это отлично работает, когда я выполняю это из командной строки, но это не удается, когда я пытаюсь выполнить его через мой код. Я пробовал 64-битную версию Dism.exe под C:WindowsSysWoW64 папка, но она тоже терпит неудачу. Вот сообщение об ошибке, которое я получаю,

нельзя обслуживать 64-разрядных операционная система с 32-разрядной версии из DISM. Пожалуйста, используйте версию DISM, который соответствует вашему архитектура компьютера.

Что я пропустила?

UPDATE: SLaks был прав, но проблема оказалась в том, что MS Visual studio express edition по умолчанию нацелен на x86, который мне пришлось вручную редактировать .файл csproj для AnyCPU, чтобы он работал.

4 ответов


потому что вы работаете в 32-битном процессе, вы перенаправление на 32-разрядную версию в SysWoW64

Run %WINDIR%\SysNative\dism.exe для предотвращения перенаправления.


создайте ниже содержимое в пакетном файле, например RunDism.летучая мышь!--2-->

%WINDIR%\SysNative\dism.exe

вызов пакетного файла в вашей программе. SysNative не является реальной папкой, поэтому вы не можете вызвать код выше в своей программе напрямую, он должен быть вызван системой. Этот способ работает для меня.


дело в том, что вам нужно вызвать соответствующую dism.exe dependng на архитектуру системы.

как сказал @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");
}

источник: Перенаправитель Файловой Системы


Мне пришлось использовать " SysNative\dism.исполняемый" Если я добавил %WINDIR%\, это не сработает, я использую VS2017 для установки на сервере 2012R2. Tnhx!