来自Shell的安静的MSI Exec执行

时间:2015-12-07 21:08:38

标签: c++ windows shellexecute msiexec

我在安静地安装MSI时遇到了一些麻烦。我可以让MSI正常运行:

TCHAR argmnt[] = TEXT("open");
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);
wchar_t run[256];
wcscpy_s(run, L"C:\\Users\\");
wcscat_s(run, username);
wcscat_s(run, L"\\AppData\\Local\\Temp\\index.msi");
ShellExecute(NULL, argmnt, run, NULL, NULL, SW_SHOW);

但如果我将“/ quiet”添加到最后一行,如下所示:

wcscat_s(run, L"\\AppData\\Local\\Temp\\index.msi /quiet");

根本不会安装MSI。我尝试使用如下参数添加TCHAR变量:

TCHAR params[] = TEXT("/quiet");

使用更新的shellexecute:

ShellExecute(NULL, argmnt, run, params, NULL, SW_SHOW);

有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

Msi文件不是可执行文件,因此请尝试传递给您的运行参数“msiexec.exe”并使用/ qn(完全静默)或/ qb(仅限进度条)将参数路径传递到您的msi文件:< / p>

wcscpy_s(run, "msiexec.exe");
wcscpy_s(params, L"C:\\Users\\");
wcscpy_s(params, username);
wcscpy_s(params, L"\\AppData\\Local\\Temp\\index.msi /qn");

答案 1 :(得分:0)

正确的方法是给我们ShellExecuteEx()。在调用它之前,您需要准备SHELLEXECUTEINFO数据结构。 然后,可以将 lpParameters 成员用于“ / quiet” 标志。