Называя систему 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!