我正在尝试调试一个问题,但我不明白。func BackgroundProcess(lpCommandLine string) (error) { var lpProcessAttrs windows.SecurityAttributes var lpThreadAttrs windows.SecurityAttributes var lpProcInfo windows.ProcessInformation var lpStartup windows.StartupInformation // convert to null terminated lpCli, err := StringToLpStr(lpCommandLine) if err != nil { return err } if ok := CreateProcess(nil, lpCli, &lpProcessAttrs, &lpThreadAttrs, true, 0, nil, nil, &lpStartup, &lpProcInfo); !ok { return GetLastError() } // DeleteProcessAccessRight is just a const for 1 childProcessHandle = OpenProcess(DeleteProcessAccessRight, false, lpProcInfo.dwProcess) if ok := TerminateProcess(childProcessHandle, 0); !ok { return GetLastError() }}如果我用 调用它,BackgroundProcess("C:\\Windows\\System32\\calc.exe")我会得到错误EINVAL,即invalid argumenton TerminateProcess。查看 TerminateProcess 的 MSDN 文档,您需要首先使用 PROCESS_TERMINATE 访问权限打开对进程的访问权限。我正在使用该访问权限打开流程,因此它应该可以正常工作。我做错了什么/错过了什么?
1 回答
心有法竹
TA贡献1866条经验 获得超5个赞
所以我想出了这个具体问题。我正在测试C:\\Windows\\System32\\calc.exe
,这是一个通用 Windows 应用程序,它有一个运行时代理。我一开始使用 进行测试C:\\Windows\\System32\\notepad.exe
,它就开始工作了。一旦我弄清楚如何处理运行时代理,我就会更新这个答案。
- 1 回答
- 0 关注
- 150 浏览
添加回答
举报
0/150
提交
取消