我正在使用 Visual Studio 2005 创建 Windows 安装程序项目。
是否有一个选项可以使我的项目在添加/删除程序中没有卸载选项?
我的一位客户要求我这样做。原因如下:因为安装程序是现有程序的补丁程序。卸载后,程序不再工作,因为补丁文件被卸载。与其想办法恢复被替换的文件(我们无法用这个安装程序做到这一点),我们想知道是否可以禁用卸载。
我正在使用 Visual Studio 2005 创建 Windows 安装程序项目。
是否有一个选项可以使我的项目在添加/删除程序中没有卸载选项?
我的一位客户要求我这样做。原因如下:因为安装程序是现有程序的补丁程序。卸载后,程序不再工作,因为补丁文件被卸载。与其想办法恢复被替换的文件(我们无法用这个安装程序做到这一点),我们想知道是否可以禁用卸载。
您只需要使用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
可能有,但老实说,这是一个可怕的、可怕的想法。告诉用户他们可以使用机器做什么和不能做什么不是您的电话。
如果用户不应该有这样做的能力,那么这通常由管理员决定,并且用户无权根据他们的帐户类型卸载任何东西,这又不是你应该影响的事情在。
你不知道他的“用户”是谁。这可能根本不适用于最终用户软件。我们编写了很多安装在 NOC 中的定制软件;它不会将任何卸载信息放入添加/删除中。(我们使用的是 Nullsoft 的 NSIS,而不是 Visual Studio 安装程序,顺便说一句......)
说“这总是一个可怕的想法”之类的话太愚蠢了。在现代软件中有很多情况下,卸载依赖项可以真正彻底地f---手头的机器。
开源软件的理想只对那些想要破坏他们的机器的人有用。