我的魔杖建造电脑,在其安装过程中,将部署本身及其所载文件/组件,以TargetDir.

所以MyApp。msi包含MyApp.exe 和MyAppBootstrapperEmpty.exe (没有资源)在其文件表。

用户将启动一个MyAppBootstrapperPackaged.exe (含MyApp。msi作为一种资源,从网上获得的地方,或发送电子邮件或其他行为)。MyAppBootStrapperPackaged.exe 提取MyApp。msi到一个临时文件夹和执行它通过msiexec.exe.

后msiexec.exe 过程完成后,我想MyApp。msi,MyBootstrapperEmpty.exe (及MyApp.exe 在%序%\MyApp文件夹所以MyApp.exe 可以放心,访问MyApp。msi当运行(对创建下面提到的包装内容)。

MyAppBootstrapper*.exe可以尝试和复制MyApp。msi%序%\MyApp文件夹,但需要提升这样做,并且不会允许其删除,通过窗户安装卸载过程(从添加或删除程序或其他方式),它应当保留。

很明显(我认为这是显而易见的-是我错了?) 我不能包括MSI作为一个文件在我的媒体/CAB(鸡和蛋的情况),所以我相信它将必须通过一个定制的行动之前安装的过程中,加入原MSI MSI DB的媒体/CAB和适当的入境文件表上的飞行。这样做可以和如何?

想想内容的分配模式内容的文件仅以往任何时候都可以一起分发的应用程序。内容是由终端用户制作,通过应用程序在运行时间,并且包装成一个可分配EXE其中包括这两个应用程序和内容。

MyApp的安装必须保持电脑,但也可以执行的一个引导程序EXE。安装的MyApp.exe 必须访问这两个MyApp。msi和EXE是"装配"在运行时的应用程序从一个基(空的)MyAppBootstrapper.exe,这也是安装通过的MSI,并创建的内容通过终端用户。EXE的资源MSI必须相同,用于安装应用程序,这是在做运行包装。

维克斯是不是可以安装与MyApp。

就不可能有网络的依赖关系在运行/包装时(即不能这样做的包装,通过一个服务必须在当地).

我所熟悉的(和使用)的定的行动(管理和管理,通过丹麦信托基金和其他行为)。

有帮助吗?

解决方案

加入一个无压缩中你wxs这样的:

<Media Id='2'/>

然后创建一个组成部分与文件元件这样的:

<File Source='/path/to/myinstaller.msi' Compressed='no' DiskId='2' />

这将使安装寻找一个文件叫"myinstaller.msi"在安装的媒介,在同一文件夹中的msi正在安装。源的道路上应该指向一个虚拟的文件,它是仅有安抚维克斯.

编辑:下面的样品测试.wxs表明,它的工作。它产生一个考验。msi文件,该文件将安装自己来c:\program 文件\测试。注意,你需要把一个虚拟试验。msi文件在同一文件夹中的文本。wxs安抚维克斯.

<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
   <Product
         Name='ProductName'
         Id='*'
         Language='1033'
         Version='0.0.1'
         Manufacturer='ManufacturerName' >
      <Package
            Keywords='Installer'
            Description='Installer which installs itself'
            Manufacturer='ManufactererName'
            InstallerVersion='100'
            Languages='1033'
            Compressed='yes'
            SummaryCodepage='1252'/>

      <Media Id='1' Cabinet='test.cab' EmbedCab='yes'/> 
      <Media Id='2' /> 

      <Directory Id='TARGETDIR' Name="SourceDir">
         <Directory Id='ProgramFilesFolder'>
            <Directory Id='TestFolder' Name='Test' >
               <Component Id="InstallMyself">
                  <File Source="./test.msi" Compressed="no" DiskId="2" />
               </Component>
            </Directory>
         </Directory>
      </Directory>

      <Feature
            Id='Complete'
            Display='expand'
            Level='1'
            Title='Copy msi file to program files folder'
            Description='Test'>

         <ComponentRef Id="InstallMyself" />
      </Feature>

   </Product>
</Wix>

其他提示

具有一个。MSI包启动另一个。MSI包从"内部"自己是被称为 嵌套装, 和它的 不好聚聚 (见第20条).窗户安装有一些全球性数据,用于管理当前的安装,而且它不处理好多个安装在同一时间。出于同样的原因,如果你开始一个安装,然后开始尝试另一边的第一仍在进行中,你通常会看到一个弹出来的效果"的另一个安装在取得进展,请等待,直到它完成"。

你可以有一个程序,通常被称为一个引导程序(我觉得这就是你参考),这本身是不是一个安装软件包,但是这 包含 一个安装软件包(例如.MSI或.EXE)作为一种资源,可能压缩。该行动的引导程序的程序提取的/扩大的资源文件,通常在一个 %TEMP% 目录,然后启动的提取。EXE或行使在提取。MSI。引导程序可以包含多种资源并提取+安装一个接一个,如果你需要安装的先决条件之前,主要包。或者你可以船舶多个软件包作为单独的文件,并具有引导程序执行/安装它们直接从媒体分发一个接一个,或复制这些目标的机器和运行该系列的安装存在的,或...

维克斯自身没有得到安装,没有。这是一个工具。MSI软件包可以建成。在维克斯项目已在其收藏一个通用的引导程序的程序,但它还没有被实现。还有其他的引导程序可用,例如 这一个.

你不需要一个自定义的行动--事实上,由于引导程序本身不是一个窗户安装安装软件包,"定义的行动"已经没有意义。而且,如果你足够的熟悉CAs知道关于管理/非托管/丹麦信托基金,然后你知道的足以避免定义的行动时,你可以。(笑)

我认为这是很容易为你引导程序来提取MSI文件对一些预定的位置,而不是以临时文件夹。例如,到C:\Documents 并且设置\所有用户应用数据\我的公司我的产品的安装缓存。之后安装完成引导程序将离开MSI文件的坐在那里。如果在某一阶段使用者决定重新安装的产品窗户安装将能够找到源MSI文件。

此外,增加道路这个文件 RemoveFile表 因此,它被删除上卸载。你可以使用 RemoveFile元 在维克斯。

所以如果我的理解,那么我想我会有的应用程序创建一个变换(MST),有的文件内容和应用到的基MSI。我仍然不能确信我理解。:)

我会配置的MSI缓存道路的一个已知的位置。

然后在运行时如果你需要的"编辑"MSI使用VBScript或类似。

但是,我仍然要问,为什么!?!

我也是工作上的方式来部署的多MSI文件。我有一个bootstrapper.exe 程序束MSI文件和运行它们一次一个。这解决了我的问题大多数情况下。

这种情况下,它并不是解决GPO(全球政策的对象)分发的安装。GPO需要一点-msi文件,以运行安装。

要做到这这里就是我所做的这几乎解决了这个问题(但不是完全).我把点-msi文件,在该文件中表的安装和把我引导程序中的二进制表并运行它来自一个自定义的行动之后插入InstallFinalize在InstallExecuteSequence.当然引导程序将不能够运行的其他MSI是因为顶级MSI持有_MSIExecute互斥。

这是相当容易得到一个小小的一步。我引导程序控制返回到顶级的安装和continute.然后我加入WaitForSingleObject呼叫等待顶级的安装完成,并将引导程序,然后可以继续完成安装。

我的问题是,GPO安装发生在启动时间和顶级的安装完成之前分安装是完成和GPO重新启动机。

顶层安装也返回的成功状态时安装实际上可能的失败以后。

我仍在寻找一个方法框顶级的安装完成之后引导程序完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top