Câu hỏi Gọi dism.exe từ System.Diagnostics.Process Fails


Để kích hoạt Microsoft-Hyper-V và Microsoft-Hyper-V-Management trong Windows 2008 R2 Server (64bit), tôi gọi phương thức dism.exe là một quá trình. Lệnh tôi đã sử dụng là

Dism.exe / trực tuyến / Get-FeatureInfo   / Tên tính năng: Microsoft-Hyper-V

Dism.exe / trực tuyến / Get-FeatureInfo   / FeatureName: Microsoft-Hyper-V-Quản lý-Khách hàng

Điều này làm việc tốt khi tôi thực hiện điều này từ dòng lệnh nhưng nó không thành công khi tôi cố gắng thực hiện nó thông qua mã của tôi. Tôi đã thử phiên bản 64bit của Dism.exe trong thư mục C: \ Windows \ SysWoW64 nhưng nó cũng không thành công. Đây là thông báo lỗi tôi nhận được,

Bạn không thể chạy dịch vụ 64 bit   hệ điều hành với phiên bản 32 bit   của DISM. Vui lòng sử dụng phiên bản   DISM tương ứng với   kiến trúc của máy tính.

Tôi đang thiếu gì ở đây?

UPDATE: SLaks là đúng, nhưng vấn đề hóa ra là MS Visual studio phiên bản thể hiện theo mặc định mục tiêu x86 mà tôi đã phải tự chỉnh sửa trong tập tin .csproj để AnyCPU để làm cho nó hoạt động.


10
2018-05-09 12:13


gốc


SysWoW64 chứa các phần tử 32 bit, không phải là thực thi 64 bit. - SLaks


Các câu trả lời:


Vì bạn đang chạy trong quy trình 32 bit, bạn được chuyển hướng đến phiên bản 32 bit trong SysWoW64

Chạy %WINDIR%\SysNative\dism.exe để ngăn chặn chuyển hướng.


25
2018-05-09 12:15



Đã thử nó nhưng vẫn phải đối mặt với cùng một vấn đề nhưng không may mắn! Dưới đây là hai dòng từ nhật ký, DISM.EXE: Thực hiện dòng lệnh: C: \ Windows \ SysWow64 \ dism.exe / trực tuyến / Get-FeatureInfo / FeatureName: Microsoft-Hyper-V  Cửa hàng nhà cung cấp DISM: PID = 892 Đang tải nhà cung cấp từ vị trí C: \ Windows \ System32 \ Dism \ FolderProvider.dll - CDISMProviderStore :: Internal_GetProvider Mặc dù tôi đã nhắm mục tiêu phiên bản 64bit của nó, nó vẫn đang tìm kiếm các thư viện tháo gỡ các quy trình 32 bit - Sivakumar Kailasam
Điều này dường như không hiệu quả với tôi. Trong máy chủ của tôi (cùng một hệ điều hành, cũng 64 bit) không có thư mục C: \ Windows \ SysNative nào cả ... - Frew Schmidt
Thư mục C: \ Windows \ SysNative chỉ hiển thị với các quy trình 32 bit. - dabide
Câu trả lời này; Slaks, giải quyết vấn đề của tôi. - MarwaAhmad


Tạo nội dung bên dưới trong một tệp lô, ví dụ: RunDism.bat

%WINDIR%\SysNative\dism.exe

Gọi tập tin batch trong chương trình của bạn. SysNative không phải là một thư mục thực, vì vậy bạn không thể gọi mã trên trong chương trình của bạn trực tiếp, nó phải được gọi bằng hệ thống. Bằng cách này là làm việc cho tôi.


4
2017-10-18 01:01



Tôi phát triển trên máy Mac ngay bây giờ để không thể xác minh điều này nhưng có thể hữu ích cho người khác đang gặp vấn đề này. Cảm ơn - Sivakumar Kailasam


Điều bạn cần gọi là thích hợp dism.exe phụ thuộc vào kiến ​​trúc hệ thống.

Như @eric xu cho biết, bạn cần phải giải quyết con đường vì nó không phải là một con đường thực sự. Dưới đây là mã hoạt động cho tôi. Về cơ bản nó phát hiện kiến ​​trúc hệ thống, giải quyết đường dẫn tùy thuộc vào kiến ​​trúc và sau đó gọi cho phù hợp 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");
}

Nguồn: Hệ thống tập tin Redirector


2
2018-03-21 06:13





Tôi đã phải sử dụng "SysNative \ dism.exe" Nếu tôi thêm% WINDIR% \ nó sẽ thất bại, tôi đang sử dụng VS2017 cài đặt trên Server 2012R2. Tnhx!


0
2017-08-28 19:48