1 回答

TA貢獻1877條經驗 獲得超6個贊
導致該問題的原因是應用程序在 WOW64(64 位上的 32 位)中運行,因此 winmgmt 的路徑位于 systemwow64 文件夾中,并且服務在 64 位模式下運行。通過在構建選項中取消選中“首選 32 位”來修復此問題。在不禁用首選 32 位的情況下解決此問題的另一種方法是使用 wow64apiset 在 verifyrepository 方法開始時調用Wow64DisableWow64FsRedirection,然后在最后調用Wow64RevertWow64FsRedirection函數,如下所示:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
public static void VerifyRepository()
{
var wow64Value = IntPtr.Zero;
Wow64DisableWow64FsRedirection(ref wow64Value);
var p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = @"winmgmt";
p.StartInfo.Arguments = @"/verifyrepository";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Wow64RevertWow64FsRedirection(wow64Value);
WMIVerifyResultReceived?.Invoke(null, new WMIVerifyResultReceivedEventArgs(output));
}
請注意,如果您喜歡 32 位且未選中,則無需使用 wow64apiset 調用。
- 1 回答
- 0 關注
- 124 瀏覽
添加回答
舉報