我想构建一个 MSI,在其安装过程中,它将自身连同其包含的文件/组件一起部署到 TargetDir。
因此 MyApp.msi 在其文件表中包含 MyApp.exe 和 MyAppBootstrapperEmpty.exe(没有资源)。
用户启动 MyAppBootstrapperPackaged.exe(包含 MyApp.msi 作为资源,从某处的 Internet 或电子邮件或其他方式获得)。MyAppBootStrapperPackaged.exe 将 MyApp.msi 提取到一个临时文件夹并通过 msiexec.exe 执行它。
msiexec.exe 进程完成后,我想要 MyApp.msi、MyBootstrapperEmpty.exe(以及 %ProgramFiles%\MyApp 文件夹中的 MyApp.exe,以便 MyApp.exe 在运行时可以确保访问 MyApp.msi(用于创建以下 -提到的包装内容)。
MyAppBootstrapper*.exe 可以尝试将 MyApp.msi 复制到 %ProgramFiles%\MyApp 文件夹,但需要提升才能这样做,并且不允许通过 Windows Installer 卸载过程(从添加/删除程序或其他方式)将其删除,这应该保留。
显然(我认为这很明显 - 我错了吗?)我不能将 MSI 作为文件包含在我的媒体/CAB(鸡和蛋场景)中,所以我相信必须在安装之前通过自定义操作来完成过程中,将原始 MSI 添加到 MSI DB 的媒体/CAB 和文件表中的适当条目。这可以做到吗?如果可以,怎么做?
考虑一个内容分发模型,其中内容文件只能与应用程序一起分发。内容由最终用户在运行时通过应用程序生成,并打包成一个可分发的 EXE,其中包括应用程序和内容。
MyApp 的安装程序必须保持为 MSI,但可以由 Bootstrapper EXE 执行。安装的 MyApp.exe 必须同时访问 MyApp.msi 和 EXE 将由应用程序在运行时从基础(空)MyAppBootstrapper.exe(也由 MSI 安装)以及由应用程序创建的内容“组装”最终用户。EXE 的资源 MSI 必须与用于安装正在执行运行时打包的 App 的资源 MSI 相同。
WIX 不能与 MyApp 一起安装。
在运行/打包时不能有网络依赖(即不能通过 Web 服务进行打包 - 必须在本地完成)。
我熟悉(并使用)自定义操作(托管和非托管,通过 DTF 和其他方式)。