5

我对使用命令行参数调用CreateProcessAsUser的正确方法有些困惑。因此,无需详细说明填写其余参数的详细信息,有人可以确认这是应该如何完成的吗?(换句话说,我应该将exe文件路径作为第一个命令行参数,还是指定它就lpApplicationName足够了?)

LPCTSTR pExePath = L"c:\\program files\\sub dir\\program.exe";
LPCTSTR pCmdLine = L"v=\"one two\"";

TCHAR buff[MAX_PATH];
StringCchCopy(buff, MAX_PATH, _T("\""));
StringCbCat(buff, MAX_PATH, pExePath);
StringCbCat(buff, MAX_PATH, _T("\" "));
StringCbCat(buff, MAX_PATH, pCmdLine);

CreateProcessAsUser(hToken, pExePath, buff, NULL, NULL, FALSE, dwFlags, NULL, NULL, &si, &pi);
4

1 回答 1

11

如果第二个参数CreateProcessAsUserNULL,那么模块名称必须是第三个参数中第一个空格分隔的标记。

如果第二个参数CreateProcessAsUser不是NULL,那么它将被视为可执行文件来执行。在这种情况下,第三个参数可以是

一个)"EXENAME p1 p2"

或者它可以是

b)"p1 p2"

如果您选择a),那么子进程将具有以下内容

argv[0] --> EXENAME

argv[1] --> p1

argv[2] --> p2

如果您选择 b),那么子进程将拥有

argv[0] --> p1

argv[1] --> p2

无论哪种方式,要执行的过程都是EXENAME(第二个参数CreateProcessAsUser)。然而,被调用的进程应该知道命令行参数的传入方式。

如果您使用 b),您还可以选择将第二个参数传递给CreateProcessAsUseras NULL

于 2012-12-22T08:31:24.790 回答