2011-06-15 6 views
1

cab 파일에 nsi로 패키지 된 ActiveX 플러그인을 설치하려고하는데 문제가 발생했습니다.MSIEXEC.EXE를 시작한 다음 완료 될 때까지 기다리는 부트 스트랩 EXE를 작성하는 방법

로그 내가 생각

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/en-US/ieextensiondevelopment/thread/3d355fb6-8d6a-4177-98c2-a25665510727/

나는이 제안 솔루션을 시도하고 싶지만 방법

에 아무 생각이 없습니다

작은 부트 스트랩 EXE를 생성합니다. 은 MSIE를 실행하지만 XEC.EXE 을 입력 한 다음 완료 될 때까지 기다립니다.

누군가 도움을 줄 수 있습니까?

감사합니다.

+0

왜 직접 MSI를 사용할 수 없습니까? 사용자가 MSI 파일을 두 번 클릭하고 MSI가 배포한다는 의미입니까? –

답변

0

dotNetInstaller - 필요 이상으로 많은 일을하는 미리 작성된 부트 스트 래퍼 프로그램을 살펴보십시오.하지만 정확히 묻는대로 할 수 있습니다.

1

다음은 msiexec.exe를 호출하여 첫 ​​번째 명령 줄 매개 변수에 전달 된 msi를 자동으로 설치하는 간단한 래퍼입니다.

는 그것은 비주얼 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, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) { 
     printf("CreateProcess failed (%d).\n", GetLastError()); 
     return 2; 
} 

WaitForSingleObject(pi.hProcess, INFINITE); 

CloseHandle(pi.hProcess); 
CloseHandle(pi.hThread); 

return 0; 
} 

희망을.

관련 문제