我正在尝试创建一个不“携带”任何文件的安装程序,但会设置注册表项并创建一个小文件夹结构(如果不存在)
该脚本使用CopyFile将文件从网络位置复制到c盘上的文件夹。
我们的想法是创建一个安装程序,只要网络文件更新,就可以重新运行该安装程序,以便为用户提供本地文件。
CopyFile代码前面有一个RemoveFile行(在同一个组件中),因此应该始终将文件复制为“fresh”
文件夹结构和注册表项实际上不需要重复,但如果它们不重要。
我也不担心卸载(也不担心它总是需要安装)但是我在系统安装后无法创建安装所以我需要以某种方式进行升级
我在wxs文件中有(当前得到的)这些脚本
http://schemas.microsoft.com/wix/2006/wi'>
<Product
Id='*'
Name='Eclipse Template Installer'
UpgradeCode='$(var.ProductUpgradeCode)'
Version='$(var.ProductVersion)'
Manufacturer='Article 10'
Language='1033'>
<Package InstallerVersion='200' Compressed='yes' Comments='Windows Installer Package' />
<Media Id='1' Cabinet='product.cab' EmbedCab='yes' />
<Upgrade Id="$(var.ProductUpgradeCode)">
<UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
<UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="yes"
Property="OLDERVERSIONBEINGUPGRADED"/>
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize"/>
</InstallExecuteSequence>
当我第一次运行安装程序时,它可以工作。文件被复制,一切都很好。
然后我调整我复制的一个文件以强制在其上新的日期/时间并重新运行安装程序。它会弹出,表示它正在收集信息但不会用旧版本替换该文件,所以我认为安装程序已经断定它不需要做任何事情,因为已经安装了当前的“最新版本”?
如果我在“程序和功能”中选择“修复”,则文件会更新。
我尝试将IncludeMaximum设置为是,但这似乎没有帮助。结果相同。
我也尝试过MajorUpgrade命令而不是InstallExecuteSequence但是得到了相同的最终结果。也许出于不同的原因,但不是很确定。也许没有正确使用它。
有人能告诉我如何强制我的安装程序重做原来所做的一切,即使版本匹配吗?
我的客户端无法制作新的MSI文件,因此无法更新版本和重建。他们只想更新网络文件(模板)并重新运行MSI以获取本地文件。
MSI的第一次运行也为他们的机器配置模板,所以它非常简单,这就是他们想要的。
由于
西蒙
答案 0 :(得分:0)
可能是一个坏主意(我不确定此产品/工具应该做什么),但您可以调整MSI标准操作&#34; PublishProduct&#34;到&#39; 0&#39;所以它永远不会运行。这样,您的MSI将安装并且永远不会在机器上注册。您可以反复继续运行安装程序,它永远不会检测到安装了旧版本。
当然,这不是正确的&#39;如何处理事情,但它确实有效。