在“添加/删除程序”中隐藏卸载程序?

时间:2009-01-20 20:47:10

标签: installer installation windows-installer uninstall

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

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

我的一位客户要求我这样做.. 这是为什么:因为安装程序是现有程序的补丁。卸载后,程序不再有效,因为已卸载已修补的文件。我们想知道是否可以禁用卸载,而不是想办法恢复被替换的文件(我们无法使用此安装程序)。

4 个答案:

答案 0 :(得分:8)

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

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

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

另外,我建议你拿一份The Definitive Guide to Windows Installer来解释你应该如何,为什么以及在哪里使用这样的技巧。同时让您非常了解Windows安装程序的基本原理,并帮助您设计出更好的安装程序。本书中的所有示例都使用Windows Installer SDK.

中的Visual Studio +免费工具

编辑用户仍然可以完全控制通过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

答案 1 :(得分:3)

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

如果用户不应该这样做,那么通常由管理员决定,并且用户没有权利根据他们的帐户类型卸载任何内容,这也不是你的意思应该有影响力。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

说“这总是一个可怕的想法”之类的东西太傻了。现代软件中有许多情况下,卸载依赖关系可以真实而彻底地解决机器的问题。

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