【问题标题】:Running WSReset.exe with CreateProcess or system使用 CreateProcess 或系统运行 WSReset.exe
【发布时间】:2016-06-21 17:21:37
【问题描述】:

我正在尝试在 Windows 10 上运行 WSReset.exe,但不断收到未找到文件的错误。 WSReset.exe 肯定在“C:\Windows\System32\WSReset.exe”中,但是从我的程序启动的 CMD/Powershell 窗口似乎找不到它。但是在我的程序之外启动的 CMD/Powershell 窗口确实会执行该文件。

STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
int t = (CreateProcess(L"C:/Windows/System32/wsreset.exe", L"", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo));
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);

SHELLEXECUTEINFO ShExecInfo = { 0 };
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = L"C:/Windows/System32/wsreset.exe";
ShExecInfo.lpParameters = L"";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

产生“Windows 找不到...”错误消息。

【问题讨论】:

    标签: windows winapi createprocess


    【解决方案1】:

    应用程序是 32 位的。奇怪的是 System32 = 64 位,SysWOW64 = 32 位。因此,当我调用“C:/Windows/System32/wsreset.exe”时,Windows 会将其转换为“C:/Windows/SysWOW64/wsreset.exe”,并且该位置没有 wsreset.exe。

    解决方法是在调用 CreateProcess/ShellExecuteEx/System 之前禁用重定向。

    //Disable redirection
    PVOID OldValue = NULL;
    Wow64DisableWow64FsRedirection(&OldValue);
    
    STARTUPINFO info = { sizeof(info) };
    PROCESS_INFORMATION processInfo = { 0 };
    CreateProcess(L"C:/Windows/System32/WSReset.exe", L"", NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo);
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);
    
    //Enable redirection (important, otherwise program can crash)
    Wow64RevertWow64FsRedirection(OldValue);
    

    【讨论】:

      猜你喜欢
      • 2015-10-22
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多