단순히 EXE 파일을 래핑하는 MSI를 만드는 방법
-
21-08-2019 - |
문제
너무 많은 실험 끝에 Windows Installer는 단순히 나쁜 기술이라는 결론에 도달했습니다.하지만 고객은 MSI 파일을 원합니다.
그렇다면 EXE 파일을 임시 디렉터리에 추출하고 EXE 파일에 전달된 것과 동일하거나 유사한 옵션으로 실행하는 MSI 파일을 어떻게 만들 수 있습니까?
MSI 옵션은 다음에 설명되어 있습니다. Msiexec(명령줄 옵션) (MSI의 낮은 수준 "실행"은 msiexec 옵션 package.msi입니다).
편집하다:mjmarsh의 WiX 솔루션이 작동하는 것 같습니다.아직 시도해 볼 기회가 없었을 뿐입니다(크런치 타임).효과가 있다면 받아들이겠습니다.
편집하다:작동하지 않습니다.누락된 작품:유/무인은 이용할 수 없는 것 같습니다.
어쨌든, 이 작업을 수행하는 유일한 방법은 사용자 지정 작업이 상위 프로세스를 종료하는 것입니다!
편집하다:그래서 누군가가 모든 것을 설치 후 사용자 정의 작업으로 래핑하는 추가 답변으로 게시했습니다.이론적으로는 가능하지만 재부팅이 필요할 수 있으므로(때때로 재부팅이 필요한 .NET 4용 MS 덕분에) 추가 해커 작업을 수행해야 합니다.따라서 장점 매트릭스에서 :
Transparency: No. One big custom action.
Customizability: No.
Standardization: No.
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work but will not.
요점이 없습니다.
해결책 4
해결책이 없습니다. MSI 중첩 문제로 인해 회사 MSI 설치가 어쨌든 깨질 때 NSIS를 갔다. 노력하다 언젠가 MSI 내부에서 EXE 랩핑 MSI 설치).
다른 팁
글쎄, 자유로운 방법과 $$$ 방법이 있습니다. 여기서 모든 것을 문서화 할 수는 없지만 이렇게하면 시작해야합니다.
참고로, Windows Installer는 미친 기술입니다. 작업이 간단하다고 생각하는 곳이 여러 번 있지만 실제로는 복잡해집니다. 당신은 그것을 이해하기 위해 자신을 몰입해야합니다.
어쨌든 여기에 간다 :
무료 : wix (여기)
XML 구성 파일 세트에서 MSI 파일을 생성하는 무료 도구입니다. 온라인으로 튜토리얼을 찾을 수는 있지만 여기에 다음과 같습니다.
WXS 파일에서 다음 태그를 사용하여 EXE를 설치 프로그램으로 압축 할 수 있습니다.
<Binary Id="MYEXE" src="<path to my exe?"/>
그런 다음 EXE 파일을 시작하는 사용자 정의 작업을 만들 수 있습니다.
<CustomAction Id="EXECA_CALLMYEXE" Return="check" Execute="deferred" BinaryKey="MYEXE"
ExeCommand="my command line"/>
그런 다음 사용자 정의 작업을 InstallExecuteSequence
적절한 장소에서 InstallInitialize
그리고 InstallFinalize
)
<InstallExecuteSequence>
<Custom Action="EXECA_CALLMYEXE" After="InstallInitialize"><![CDATA[Not REMOVE]]></Custom>
$$$ : InstallShield를 얻으십시오 (여기)
먼저 "기본 MSI"프로젝트를 만들고 원하는 말을하십시오. setup.exe가 생성되지 않았습니다. 릴리스 설정에서 이것을 설정합니다.
그런 다음 본질적으로 Wix와 같은 일을하지만 UI가 있습니다.
- 직접 편집기를 사용하고 'Binary'테이블에 EXE 파일을 넣어 Helper EXE 파일을 지정할 수 있습니다.
- 왼쪽 트리의 "사용자 정의 작업"노드에서 해당 EXE 파일을 시작할 사용자 정의 작업을 만들 수 있습니다.
- "설치 시퀀스"를 선택하고이를
InstallExecuteSequence
그 사이의 어딘가InstallInitialize
그리고InstallFinalize
예전에 내가 말했듯이.
죄송합니다. 더 자세히 할 수는 없지만 이것은 좋은 출발이되어야합니다.
여호수아, 나는 당신의 좌절감을 잘 이해합니다. MSI는 배포를 생각하는 완전히 새로운 방법입니다. 그럼에도 불구하고 Applied MSI는 특히 기업 고객에게 최상의 배포를 제공합니다.
설치 관리자 EXE는 어떤 작업을 수행합니까? 대부분 파일 사본, 일부 등록 및 일부 레지스트리가 쓰여 지거나 복잡한 설치 로직을 실행하고 데이터베이스를 설정하는 것 등? 내가 묻는 이유는 아마도 당신을 위해 잘 작동하는 WIX MSI를 만들어서 EXE 접근법을 포기할 수 있기 때문에 아마도 잘 작동하는 WIX MSI를 만들 수 있기 때문입니다.
실제로 MSI 내부에서 EXE를 실행할 수는 있지만 적절한 시퀀싱이 필요하며 간단한 MSI보다 더 많은 블루스를 유발할 수 있습니다. 앱이 작고 설치 중에 미친 짓을하지 않으면 기본적인 WIX 변환을 제공하게되어 기쁩니다.
또 한있다 MSI 래퍼의 무료 버전. 또한 제거 및 업그레이드를 지원합니다. 또한 추가 또는 제거 프로그램에서만 하나의 항목 만 생성합니다.
추가 weir's
대답, 변경 custom action attribute
아래처럼 :
<!--Run Action-->
<CustomAction Id="RunWrappedExe"
Return="asyncNoWait"
FileKey="ApplicationFileId"
Execute="deferred"
ExeCommand=""
HideTarget="no"
Impersonate="yes"/>
환경 Return=asyncNoWai
기다리지 않습니다 exe
돌려 주다. 설치 프로그램은 작업을 수행하고 정상적으로 닫힙니다. 한편, exe
계속 실행.
-Madhuresh
MSI를 관리하고 싶지 않고 EXE 만 실행하려면 시도하십시오. MSI 변환기가 무료로 exe. 당신은 방금 exe로가는 길을 넣고 MSI를 얻습니다.
이 시도:
MSI 패키지에는 동작 호출 "설치 후 응용 프로그램 시작"이 있습니다. 즉, MSI 설치 후에 EXE 파일이 실행됩니다 (MSI가 닫히면).
EXE가 다른 MSI 패키지를 호출하면 첫 번째 패키지와 충돌하지 않습니다.
Wix는 할 수 있습니다. 다음은 Wix 3.5에 대한 샘플 코드입니다.
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Id='*' UpgradeCode="11111111-2222-3333-4444-555555555555"
Name='My Setup' Language='1033' Version='1.0.0.0'
Manufacturer='Your company'>
<Package Description='pak' InstallerVersion='200' Compressed='yes' />
<Media Id='1' Cabinet='setup.cab' EmbedCab='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="TempFolder">
<Directory Id="INSTALLLOCATION" Name="~_tmpdir">
<Component Id='MyComponent' DiskId='1' Guid=''>
<File Id="File0" Name="setup.exe" Source="setup.exe" />
<File Id="File1" Name="file1.txt" Source="file1.txt" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id='InstallFeature' Title='Install Feature' Level='1'>
<ComponentRef Id='MyComponent' />
</Feature>
<!-- Run Action -->
<CustomAction Id="RunWrapExe" Return="ignore" Execute="deferred"
FileKey="File0" ExeCommand="setup.exe param here"
HideTarget="no" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="RunWrapExe"
After="InstallFiles">NOT REMOVE~="ALL"</Custom>
</InstallExecuteSequence>
</Product>
</Wix>
나는 같은 문제를 겪고있었습니다 (랩 exe, .NET 설정 등을 포함하여 EXE의 다른 MSI에 전화). 여기에 내 해결책이 있습니다.
InstallAware를 사용하여 설치 exe를 빌드합니다.생성된 EXE를 MSI로 래핑하는 자체 MSI 래퍼가 있습니다.
정상적으로 작동합니다. EXE는 문제 없이 다른 MSI를 호출할 수 있습니다(.net 설정, 기타 타사 설정 포함). 그러나 이는 MSI 시작이 설정 EXE 파일을 시작한 후 종료("반환") 권한을 가지기 때문입니다. 재귀 MSI 호출의 MSI 제한을 피합니다.
그러나 MSI 배포 도구를 사용하는 일부 고객(회사)에서는 설정 프로세스가 끝난 후에만 MSI(msiexec)가 반환(종료)되도록 요구하는데 이것이 위 해결 방법의 문제입니다.
그래서 - 이 문제를 해결하려면:
EXE 설정이 끝난 후에만 반환하는 MSI를 생성하는 또 다른 MSI 래퍼(exemsi.com)가 있지만 이를 사용하려면 InstallAware의 또 다른 고유 옵션을 사용해야 합니다.
InstallAware에는 MSI 재귀 제한을 피하기 위해 Windows Installer 엔진을 기반으로 하지 않고 자체 기본 엔진을 사용하여 EXE 설정을 생성하는 옵션이 있습니다.이 두 가지를 결합하면 완벽한 솔루션을 얻을 수 있습니다.
이 질문이 처음 게시된 지 수년이 지났지만 이것이 누군가에게 도움이 되기를 바랍니다.
간단한 속임수 :
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
namespace Setup
{
internal class Program
{
[DllImport("kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private static void Main(string[] args)
{
ShowWindow(GetConsoleWindow(), 0);
Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream("Setup.MSI.Temp.msi");
string path = Path.Combine(System.IO.Path.GetTempPath(), "Temp.msi");
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
st.CopyTo(fileStream);
}
Process p = new Process();
p.StartInfo.FileName = path;
p.Start();
p.WaitForExit();
File.Delete(path);
}
}
}
EXE 또는 폴더에서 MSI를 만들기 위해 간단하고 무료 .NET 도구를 만들었습니다 (WixSharp 및 Wix를 사용하고 있습니다).http://legacy.aversbouch.biz/free-msi-wrapper
Nah Man, 그냥 Inno Setup의 마법사를 사용하십시오. 설정은 exe를 만들지 만 MSI는 아닙니다. 그것은 5 분과 같으며 Windows 설치 프로그램이 있습니다.
간단히 다운로드 그것은 그것을 설치하고, 당신의 exe를 가리키고, 화면 프롬프트를 따르십시오.