如何在自定义卸载操作中获取安装目录(使用MSI安装,使用VS2010创建)?

时间:2011-05-06 10:37:54

标签: c# visual-studio installer windows-installer

所以我使用安装项目为我的应用程序创建了一个简单的msi设置,并添加了一些自定义操作,可以处理从存档中提取文件等内容。现在,我的程序文件中有两个额外的文件 - 目录,这意味着MSI不会自动删除卸载目录。我的解决方案是创建一个自定义操作,删除其余文件。

现在只要在安装时使用默认目录,这就可以正常工作了。但是如果用户选择更改呢?我假设在自定义操作中必须有一种非常简单的方法来读取目录,但我不太清楚它是什么。

据我通过谷歌搜索发现,有一些属性,如TARGETDIR与MSI包相关。但是,有些网站还说我应该在安装阶段自己设置这个属性。

这一切让我很困惑。基本上我看到两种解决方法:

1)确保应用程序不会自己创建文件,MSI会处理它。这意味着更多的工作,因为我不负责这些额外的文件。

2)在卸载应用程序时找出自定义操作的安装目录,并自行删除最后一位。这是我所看到的快速而肮脏的方式,现在肯定已经足够了。但是如何实现这个目标呢?

同样在我在这里的时候,我不妨问一个更相关的问题。正如我之前提到的,我在安装时提取了一些文件。现在,我想在提取这些档案后将其删除。问题是,如果我这样做,MSI会认为我的安装已经破坏,并在每次启动应用程序时将其复制回来。那么如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

无需使用自定义操作删除文件。 MSI通过两个步骤内置了对此方案的支持:

  1. 使用搜索找到要删除的文件。这是一个教程 http://msdn.microsoft.com/en-us/library/aa371564(VS.85).aspx

  2. 然后,您可以安排文件删除操作以实际删除文件。 http://msdn.microsoft.com/en-us/library/aa371201(VS.85).aspx

  3. 关于你的第二个问题:

    不要将档案添加到File表。而是创建一些自解压存档并使用二进制自定义操作来解压缩它们。

    http://msdn.microsoft.com/en-us/library/aa368085(VS.85).aspx