是否可以在唯一的安装目录中安装MSI中的文件?例如,我想做以下几点:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="$(var.MyProductName)">
<Directory Id="SXSBASEDIR" Name="SxS">
<Directory Id="SXSDIR" Name="<<Unique-ID>>">
^
|
---------- Notice the <<Unique-ID>> here ----------+
<Directory Id="BINDIR" Name="bin" />
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>对于每个安装,<<Unique-ID>>必须是不同的。例如,如果安装MSI一次,那么文件就会安装在\Program Files\MyProductName\SxS\<<Unique-ID-1>>\bin中。如果有一个卸载,然后重新安装相同的MSI,那么文件最终应该安装在\Program Files\MyProductName\SxS\<<Unique-ID-2>>\bin中。
我已经将DATE和TIME变量视为生成<<Unique-ID>>的一种方法,但不幸的是,它们包含的字符在文件名中是不合法的(而且它们的格式因地区而异)。任何关于如何处理这一问题的建议都将受到赞赏。如果唯一的解决办法是使用自定义操作,那么在InstallExecuteSequence中您建议我将自定义操作放在哪里?
解释
下面是我为什么需要这个的解释。
我有一个Windows文件系统驱动程序(FSD),它是一个内核模式驱动程序。由于Windows文件系统的设计,一旦加载了FSD,就不能(轻松)卸载。这使得不重新启动系统就不可能卸载和升级。
作为解决办法,我已经想出了一个解决方案,在这个解决方案中,FSD安装在一个唯一的每个安装目录中,例如:\Program Files\MyProductName\SxS\<<Unique-ID>>\bin。这应该允许同时加载多个FSD实例,当前已安装的实例和先前已卸载的实例。(消防处已作出修改,以支持这类并行行动。)
例如,考虑以下情况:
MyProduceName.msi.用户安装
- The FSD is installed in `\Program Files\MyProductName\SxS\1\bin`.FSD是加载的,并且可能是可卸载的(出于本discussion).范围以外的原因)。
MyProductName.msi.用户卸载
- The Windows installer infrastructure marks the `\Program Files\MyProductName\SxS\1\bin` as deleted but the directory remains.- The FSD is installed in `\Program Files\MyProductName\SxS\2\bin`.此时,
- The originally installed FSD, which will go away after a reboot. This FSD location is in the directory `\Program Files\MyProductName\SxS\1\bin` which is marked as deleted and will go away after a reboot.- The currently installed FSD. This FSD location is in the directory `\Program Files\MyProductName\SxS\2\bin` and will remain after a reboot.发布于 2022-09-01 19:28:45
您需要编写一个自定义操作,例如vbscript,它将使用一些随机数来设置字符串,然后可以设置INSTALLDIR。
dim r
randomize
r = int(rnd*10) + 1
session.TargetPath("INSTALLDIR") = session.property("ROOTDRIVE") + '\Program Files\SxS\' + r + '\bin'此自定义操作应在CostFinalize操作之后进行排序。
https://stackoverflow.com/questions/73568490
复制相似问题