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

Installation 是否在“添加/删除程序”中隐藏卸载程序?,installation,windows-installer,uninstallation,Installation,Windows Installer,Uninstallation,我正在使用VisualStudio2005创建windows安装程序项目 是否有一个选项使我的项目在“添加/删除程序”中没有卸载选项 我的一位客户要求我这样做原因如下:因为安装程序是现有程序的补丁。卸载后,程序将不再工作,因为已修补的文件将被卸载。我们没有找到一种方法来恢复被替换的文件(这是我们用这个安装程序无法做到的),而是想知道是否有可能禁用卸载。可能有,但老实说,这是一个可怕的想法。这不是你的电话告诉用户他们可以和不能用他们的机器做什么 如果用户不应该有这样的能力,那么这通常是由管理员决定

我正在使用VisualStudio2005创建windows安装程序项目

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


我的一位客户要求我这样做原因如下:因为安装程序是现有程序的补丁。卸载后,程序将不再工作,因为已修补的文件将被卸载。我们没有找到一种方法来恢复被替换的文件(这是我们用这个安装程序无法做到的),而是想知道是否有可能禁用卸载。

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


如果用户不应该有这样的能力,那么这通常是由管理员决定的,并且用户无权根据其帐户类型卸载任何内容,这同样不是您应该影响的内容。

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

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

当程序安装依赖项,而您不希望用户手动卸载依赖项,他们需要使用您提供的特定卸载脚本或其他工具时,通常会使用此方法

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

另外,我建议你拿一份副本,它会给你一些解释,说明你应该如何、为什么以及在哪里使用这样的技巧。以及让您真正了解windows installer的基本原理,并从长远来看帮助您设计更好的安装程序。本书中的所有示例都使用来自

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

Edit2:示例VBS以添加属性(如果您希望在自动生成过程中这样做)


说“这总是一个可怕的想法”这样的话太愚蠢了。在现代软件中,有许多情况下,卸载依赖项可以对手头的机器进行真实彻底的卸载


开源软件ideals只对那些想破坏机器的人有用。

我想有很多人想知道为什么你想要一个不能像安装一样轻松卸载的应用程序。同意。我知道我不是唯一一个让人恼火的人。我不确定,但你肯定让我不想一开始就安装它。这是一个简单的、有文档记录的windows installer功能。为什么会有如此多的负面影响!?!用户仍然可以卸载,它只是对ARP隐藏。Sheesh.+1表示平衡。有(非常罕见)的情况下,这是有用的。因为这并不是真正的回答问题,它应该是一个评论,而不是一个答案。可能,但是Joe没有足够高的声誉留下评论。我只是不知道如何从Visual Studio安装程序修改属性表。缺少关闭参数:Set view=database.OpenView(“INSERT-INTO-property(property.property,property.Value)VALUES('ARPSYSTEMCOMPONENT','1'))也在“Set-database=Nothing”之前添加这一行:database.commit()'似乎是必需的?我从来都不需要database.commit(),我认为只有在最初打开事务时才需要它。
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