我有一个Windows安装程序用于我的应用程序。应用程序包中还包含Installer类,在其中执行了一些操作,其他操作在自定义操作中执行。
在安装期间,自定义操作从Installer安装另一个应用程序。我想知道如果已经存在相同版本的此应用程序,则不想安装或提供消息框询问是否重新安装(Y/N)。
如果我的应用程序已经安装,并且我再次点击相同的安装程序,我会得到“修复”和“删除”选项。但是,如果安装程序是新构建的,则会出现一个对话框,指出“已经安装了另一个版本……请使用添加/删除程序删除”。因此,我无法更新现有版本而不卸载它。如何更新现有版本?
非常感谢您对这两个问题的任何帮助或指导。我在网上搜索过这些问题,但找不到合适的答案。如果您能帮助我,那将真的很棒。
代码 product.xml
谢谢。
在安装期间,自定义操作从Installer安装另一个应用程序。我想知道如果已经存在相同版本的此应用程序,则不想安装或提供消息框询问是否重新安装(Y/N)。
如果我的应用程序已经安装,并且我再次点击相同的安装程序,我会得到“修复”和“删除”选项。但是,如果安装程序是新构建的,则会出现一个对话框,指出“已经安装了另一个版本……请使用添加/删除程序删除”。因此,我无法更新现有版本而不卸载它。如何更新现有版本?
非常感谢您对这两个问题的任何帮助或指导。我在网上搜索过这些问题,但找不到合适的答案。如果您能帮助我,那将真的很棒。
代码 product.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="My.Bootstrapper.ABC">
<!-- Create Package, Product Manifest http://msdn.microsoft.com/en-us/library/ee335702.aspx
Schema Reference : http://msdn.microsoft.com/en-us/library/ms229223.aspx
-->
<PackageFiles>
<PackageFile Name="XYZ.exe"/>
</PackageFiles>
<InstallChecks>
<!-- If its installed, it will be in Uninstall. DisplayName will be XYZ2.1_rc22
Can still get values of DisplayVersion (2.1_rc22) & UninstallString from this key
-->
<RegistryCheck
Property="IS_XYZ_INSTALLED"
Key="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XYZ"
Value="DisplayName"/>
</InstallChecks>
<Commands>
<Command PackageFile="XYZ.exe" Arguments="/Install">
<InstallConditions>
<BypassIf Property="IS_XYZ_INSTALLED"
Compare="ValueEqualTo" Value="XYZ2.1_rc22"/> // tHIS IS THE DISPLAYNAME, THAT I SEE IN REGISTY
<FailIf Property="AdminUser"
Compare="ValueNotEqualTo" Value="True"
String="NotAnAdmin"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes>
</Command>
</Commands>
</Product>
package.xml
<?xml version="1.0" encoding="utf-8" ?>
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName" Culture="Culture">
<!--Check for XYZversion 2.1_rc22 -->
<Strings>
<String Name="DisplayName">Install My XYZ</String>
<String Name="Culture">en</String>
<String Name="NotAnAdmin">Administrator permissions are required to install XYZ.Contact your
administrator.</String>
<String Name="GeneralFailure">A general error has occurred while installing this
package.</String>
</Strings>
</Package>
更新:
如果在计算机上未安装XYZ,则我希望安装它。使用上述代码时,它不会作为先决条件安装。在先决条件中,我选择我的应用程序(以及Windows Installer 3.1和.NET 3.5),并选择“从与我的应用程序相同的位置下载先决条件”。在设置项目构建时,我在Rel文件夹中获得3个文件夹(用于winIns、Net和要安装为先决条件的应用程序XYZ)。目前,XYZ未安装在我的计算机上,因此找不到密钥。当我安装安装程序时,它安装了应用程序,但未安装先决条件即XYZ.exe应用程序。我错在哪里了吗?谢谢。