2012-03-05 104 views
0

我希望能够取代封装在我们的MSI与用户提供了一个外部文件(它覆盖一些设置特定于该公司安装位置软件)以及将文件的文件夹(可能会或可能不存在,内容频繁更改)复制到目标文件夹中。可以将文件复制到与MSI /自定义操作

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

有没有办法让周围的权限问题,或者是有得到这些文件各得其所的更好的办法?

+0

如果你只是想使你的安装程序的一些文件交换性,你可以设置“PackageAs = vsdpaLoose”。然后这些文件与msi在同一个文件夹中。如果不需要,你也可以设置“Vital = false”。在安装项目中,他们被视为msi的一部分。 – nik 2012-03-05 17:00:09

+0

@milter这是一个不错的主意,但Vital = False并不适用,因为如果安装程序无法找到该文件,它仍会失败。似乎该属性只有当msi已经尝试安装该文件并且失败时才会关注。 – Septih 2012-03-07 10:08:54

+0

是的,你说得对,对不起。相当我之前我摆弄那个。安装程序仍会失败,但提供忽略和继续的选项。所以它会成功完成安装,但对用户来说看起来不错。不过,你可以使用一个容器文件,它可以是空的或不是(例如zip)。 – nik 2012-03-07 14:34:32

回答

0

我对这个解决方案是自定义操作期间存储微星的位置在安装目录中的文件,然后实际的程序中使用该位置找到外部文件,并将它们复制整个(如程序有访问他们)。这不是优雅的,但它似乎适用于已经尝试过的客户。

0

要与自定义操作所有情况下工作,你需要两个动作。第一次运行模拟(非系统上下文),并从源位置复制到诸如TempFolder之类的东西。第二次运行时没有模拟(系统上下文),并从TempFolder复制到预期的目标位置。

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

+0

默认情况下,应该使用模拟运行自定义操作,对吧?我知道我们有一个脚本来为这个动作设置noimpersonate位,但即使删除了该动作也无法访问源目录。我会看看半自定义操作,但他们看起来像使用wix而不是使用visual studio工具时更容易。 – Septih 2012-03-05 14:04:35

相关问题