如何解决如何编写引导EXE,它会启动MSIEXEC.EXE,然后等待其完成
|| 我正在尝试安装我的ActiveX插件,该插件打包在cab文件中的nsi中,但是遇到了问题。 日志是Code Download Error: (hr = 80070005) Access is denied.
ERR: Run Setup Hook: Failed Error Code:(hr) = 80070005,processing: msiexec.exe /package \"%EXTRACT_DIR%\\TempR.msi\"
我认为与此相同:
http://social.msdn.microsoft.com/Forums/zh-CN/ieextensiondevelopment/thread/3d355fb6-8d6a-4177-98c2-a25665510727/
我想尝试那里建议的解决方案,但不知道如何
创建一个小的引导程序EXE,
除了启动MSIEXEC.EXE外什么都不做
然后等待其完成。
有人可以提供帮助吗?
谢谢!!
解决方法
看一下dotNetInstaller-预写的bootstrapper程序,它执行的功能远远超出您的需求,但可以完全满足您的要求。
, 这是一个简单的包装程序,它调用msiexec.exe来安静地安装在第一个命令行参数中传递的msi。
它是作为Visual C ++命令行应用程序编写的:
// InstallMSI.cpp : Defines the entry point for the console application.
//
#include \"stdafx.h\"
#include <Windows.h>
#include <string>
int wmain(int argc,wchar_t* argv[])
{
if(argc < 2) {
printf(\"Usage: installmsi.exe <full path to msi file>\\n\\n\");
printf(\"Package will be installed using msiexec.exe with the /qn (quiet install) flags.\\n\");
return 1;
}
std::wstring args;
args = L\"msiexec.exe /i \\\"\";
args += argv[1];
args += L\"\\\" /qn\";
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi,sizeof(pi));
if(!CreateProcess(NULL,(LPWSTR)args.c_str(),NULL,TRUE,&si,&pi)) {
printf(\"CreateProcess failed (%d).\\n\",GetLastError());
return 2;
}
WaitForSingleObject( pi.hProcess,INFINITE );
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
希望能有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。