【发布时间】:2013-11-14 14:02:43
【问题描述】:
我有一个问题,我一直在寻找两个必须在一起的东西,以管理员身份通过Createprocess() 运行一个进程并获取输出。
当我以管理员身份在 Google 上搜索CreateProcess() 时,我得到人们回复使用shellexecute。我去shellexecute,当我在那里时,shellexecute 不会输出控制台(进程)上运行的内容。
我再次谷歌如何使用 shellexecute 获得进程的输出,我得到的答案说你不能用 shellexecute 做到这一点,使用 createprocess,所以我去 createprocess。我正在努力将我正在使用的 shellexecute 转换为 createprocess。
我用 shellexecute 做的是我正在寻找的东西,以管理员身份运行。但没有输出。
这是我的 shell 执行代码。
SHELLEXECUTEINFO si = {0};
si.cbSize = sizeof(SHELLEXECUTEINFO);
si.fMask = SEE_MASK_NOCLOSEPROCESS;
si.hwnd =NULL;
si.lpVerb = "runas";
si.lpFile = "netsh.exe";
si.lpParameters = "advfirewall firewall add rule name=\"dummy_rule\" action=allow protocol=TCP dir=in localport=3300";
si.lpDirectory=NULL;
si.nShow=SW_SHOW;
si.hInstApp =NULL;
ShellExecuteEx(&si);
WaitForSingleObject(si.hProcess, INFINITE);
CloseHandle(si.hProcess);
这段代码在一个方法中运行,它的作用是添加一个防火墙规则来为即将到来的连接打开一个端口。它工作正常,问题是我不知道进程是否成功,而不是 shellexecute。所以我需要输出。
【问题讨论】:
-
您好,您能找到解决您这个问题的方法吗?
标签: c++ winapi createprocess shellexecuteex