5

我正在使用 Visual Studio 2005 创建 Windows 安装程序项目。

是否有一个选项可以使我的项目在添加/删除程序中没有卸载选项?

我的一位客户要求我这样做。原因如下:因为安装程序是现有程序的补丁程序。卸载后,程序不再工作,因为补丁文件被卸载。与其想办法恢复被替换的文件(我们无法用这个安装程序做到这一点),我们想知道是否可以禁用卸载。

4

4 回答 4

8

您只需要使用Orca在安装程序的属性表中设置 ARPSYSTEMCOMPONENT=1 (据我所知,不能直接在 Visual Studio 中完成)

这通常在程序安装依赖项并且您不希望用户手动卸载依赖项时使用,他们需要使用您提供的特定卸载脚本或其他东西。

就个人而言,我会将补丁编写为补丁并防止补丁被卸载。

此外,我建议您阅读一份The Definitive Guide to Windows Installer的副本,它将为您提供一些关于如何、为什么以及在何处使用此类技巧的解释。以及让您对 Windows 安装程序基础知识有一个非常好的理解,并帮助您从长远来看设计一个更好的安装程序。本书中的所有示例都使用 Visual Studio + Windows Installer SDK 中的免费工具。

编辑:用户仍然可以完全控制通过 MSIEXEC 卸载,通过您提供的自定义卸载快捷方式,所有这些都是隐藏添加/删除程序 (ARP) 中的条目

Edit2:示例 VBS 添加属性(如果您想作为自动构建过程的一部分这样做)

Dim installer, database, view

Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("test.msi", 1)

Set view = database.OpenView ("INSERT INTO Property(Property.Property, Property.Value) VALUES('ARPSYSTEMCOMPONENT', '1')")
view.Execute

Set database = Nothing
Set installer = Nothing
于 2009-01-20T23:37:24.967 回答
3

可能有,但老实说,这是一个可怕的、可怕的想法。告诉用户他们可以使用机器做什么和不能做什么不是您的电话。

如果用户不应该有这样做的能力,那么这通常由管理员决定,并且用户无权根据他们的帐户类型卸载任何东西,这又不是你应该影响的事情在。

于 2009-01-20T21:00:37.827 回答
2

你不知道他的“用户”是谁。这可能根本不适用于最终用户软件。我们编写了很多安装在 NOC 中的定制软件;它不会将任何卸载信息放入添加/删除中。(我们使用的是 Nullsoft 的 NSIS,而不是 Visual Studio 安装程序,顺便说一句......)

于 2009-01-20T21:03:39.100 回答
2

说“这总是一个可怕的想法”之类的话太愚蠢了。在现代软件中有很多情况下,卸载依赖项可以真正彻底地f---手头的机器。

开源软件的理想只对那些想要破坏他们的机器的人有用。

于 2009-04-11T20:07:57.973 回答