使用msi /自定义操作将可能的文件复制到位置

时间:2012-03-05 09:44:37

标签: .net windows-installer custom-action

我希望能够将我们msi中打包的文件替换为用户提供的外部文件(它会覆盖某些特定于安装软件的公司的设置)以及复制文件夹文件(可能存在或可能不存在,内容经常更改)到目标文件夹中。

我当前的方法是将文件夹和文件与msi一起放在文件夹或CD中,并使用自定义操作在与msi相同的文件夹中查找文件夹和文件。只要从本地计算机运行安装程序,这就可以正常工作。从联网位置运行安装程序时,由于权限受限,自定义操作无法访问msi所在的文件夹。

有没有办法解决权限问题,还是有更好的方法将这些文件放到适当的位置?

2 个答案:

答案 0 :(得分:0)

要使用自定义操作在所有方案中工作,您需要执行两项操作。第一个运行模拟(非系统上下文),并从源位置复制到诸如TempFolder之类的东西。第二个运行时没有模拟(系统上下文),并从TempFolder复制到预期的目标位置。

您还可以探索一种名为semi-custom actions的技术,您可以在运行时使用信息填充DuplicateFileMoveFile表。理想情况下,这将允许您利用内置功能,并仍然可以获得所需的访问权限,但我自己没有验证过该行为。

答案 1 :(得分:0)

我的解决方案是在自定义操作期间将msi的位置存储在安装目录中的文件中,然后让实际程序使用该位置查找外部文件并将其复制(因为程序具有访问权限)给他们)。它并不优雅,但它似乎适用于尝试过它的客户。