Shell执行中的静默MSI执行

Quiet MSI Exec from Shell Execute

本文关键字:执行 MSI 静默 Shell      更新时间:2023-10-16

我在"悄悄"安装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(NULL, argmnt, run, params, NULL, SW_SHOW);

有人有什么想法吗?

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

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()。在调用它之前,您需要准备SHELLEXECUTEINFO数据结构。然后,您可以将lpParameters成员用于"/quiet"标志。