Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 复制文件太晚了_Wix_Installation_Windows Installer - Fatal编程技术网

Wix 复制文件太晚了

Wix 复制文件太晚了,wix,installation,windows-installer,Wix,Installation,Windows Installer,我需要复制文件,一旦我的MSI是点击。我现在正在使用CopyFiles功能,但速度不够快。我是否需要自己的自定义操作,或者是否有方法在显示任何UI之前移动它 谢谢使用reg文件和ini文件执行的任何操作通常都可以嵌入MSI中,并在MSI中执行。这是非常优越的,因为如果MSI的安装被中止,MSI文件将具有内置的回滚支持 Installshield提供自己的setup.exe启动程序文件,该文件实际上根本不是MSI文件,正是该文件将这些临时文件放置在系统上。这是MSI时代之前的遗留功能,它本质上允许

我需要复制文件,一旦我的MSI是点击。我现在正在使用CopyFiles功能,但速度不够快。我是否需要自己的自定义操作,或者是否有方法在显示任何UI之前移动它


谢谢

使用reg文件和ini文件执行的任何操作通常都可以嵌入MSI中,并在MSI中执行。这是非常优越的,因为如果MSI的安装被中止,MSI文件将具有内置的回滚支持

Installshield提供自己的setup.exe启动程序文件,该文件实际上根本不是MSI文件,正是该文件将这些临时文件放置在系统上。这是MSI时代之前的遗留功能,它本质上允许糟糕的MSI设计高于其他任何东西

正如Chris指出的,MSI文件在启动安装序列之前不应执行文件操作和系统更改(MSI内部InstallExecuteSequence中InstallInitialize和InstallFinalize之间的操作)


我建议将ini文件信息放在IniFile表中,将注册表信息放在注册表表中。您是否将运行EXE文件作为安装顺序的一部分?

我认为该要求的定义和设计都很糟糕。以下是您应该做的一个示例:

我有一个客户直接(零售)和间接(通过增值经销商)销售产品。他的应用程序是可扩展的,因为他或他的VAR或他们的最终用户客户要求能够使用以下属性扩展/修改/覆盖MSI:

1) 升级码

2) 产品名称

3) 许可协议

4) 图标

5) 配置文件

6) 数字证书

我的客户在C#中编写了一个向导UI,指导用户完成所有这一切,我编写了一个使用WiX DTF库(Microsoft.Deployment.WindowsInstaller)与MSI交互的库。结果是一个实用程序,它完全封装了将MSI转换为变体的过程

这也是赛门铁克防病毒的工作原理


在开发过程中,您可以引导用户使用更新的ProductName和注册表项构建MSI。生成的MSI不需要任何自定义操作,并且仍然遵循所有适用的Windows Installer最佳实践。

您能解释一下为什么需要这样做吗?这些文件的目的是什么?MSI不会在InstallInitialize之前或InstallFinalize之后对系统进行任何更改。我需要在开始时将ini文件和reg文件复制到c:\\TEMP。它可以在InstallShield中轻松完成,我以为WIX会支持这个工具,只是因为在InstallShield中做一些事情很容易,但这并不意味着你应该在InstallShield中做。我需要更多关于你用这个INI和Reg文件做什么的信息,以便为你提供最佳的设计解决方案。客户可以按他们想要的名称编辑INI文件和Reg文件,等,因为它们与MSI分开提供。我将它们复制到C:\TEMP文件夹,然后从那里调用信息。我有自己的自定义操作,将.reg文件添加到注册表,并从INI文件中获取产品名称。并非所有客户都使用这些,只有少数客户使用,我必须为他们提供灵活的服务。嗨,谢谢你的建议,但我已经在上面解释过,我必须这样做。这不是WIX的最佳选择,但我必须满足要求。请关注回滚。这是一个非常重要的要求,否则为什么还要麻烦使用MSI呢?我在日常工作中经常使用msi临时表和视图,动态编写msi,然后让msi处理繁重的工作。这种技术最适合于在安装时才知道数据的情况,而我的另一个答案(转换)最适合于在运行MSI(构建时)之前知道信息的情况。谢谢,我将提出这一点,但我现在已经让它符合要求了。谢谢ChristopherCris,这个向导是开源的吗?我也遇到过这样的要求,但程度有限,因此我可以从与MSI源文件位于同一文件夹中的INI文件和reg文件中读取MSI的信息。用户可以自定义这两个文件中的信息,我们就完成了。我在找到正确的“源文件夹”时遇到了一些问题,但问题解决了。不幸的是,在这个阶段,请不要回忆起解决方案:-(。对于不同的操作系统和msi引擎版本,这种“文件夹舞蹈”可能会有所不同。您的“转换解决方案”听起来好多了。您好,我仍然需要遵循此过程,但是我创建了一个自定义操作来从TARGETDIR复制文件,这让我遇到了麻烦。但是TARGETDIR在InstallInitialize之前没有初始化,这仍然太晚了。有人能帮我吗(我的客户编写了UI,我编写了库。不管怎样,它都是专为他的确切需要而设计的,需要根据您的需要重新编写。FWIW,我只花了几个小时就完成了库的工作。C#/DTF真的让它变得很容易。嗨,克里斯托弗,我要试试您的解决方案,看看它看起来如何,以及它是否适合我们。您建议我们去哪里t开始,你知道这方面有什么好网站吗?谢谢