来自 Shell 执行的安静 MSI 执行

Quiet MSI Exec from Shell Execute

我在安装 MSI 时遇到一些问题 "quietly"。我通常可以像这样将 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");

使用更新的 shell 像这样执行:

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

有没有人有什么想法?

Msi 文件不是可执行文件,因此请尝试将 运行 参数 "msiexec.exe" 和 params 参数路径传递给您的 msi 文件,使用 /qn(完全静音)或 /qb(使用仅进度条):

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");

正确的方法是我们ShellExecuteEx(). Before you call it you prepare the SHELLEXECUTEINFO数据结构。 然后,您可以将 lpParameters 成员用于 "/quiet" 标志。