我们正在使用Install4J作为我们当前版本的软件,并在安装过程中以静默方式安装MySQL 5.1。
对于我们软件的下一个版本,如果是升级版,我想删除MySQL 5.1并安装5.5。理想情况下,卸载应该是静默的,但不是硬性要求。我设法让它在32位Windows XP上运行,但在64位Windows 7上却没有。这是我到目前为止所做的:
String[] uninstallKeys = WinRegistry.getSubKeyNames(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
for( String uninstallKey : uninstallKeys )
{
Object displayVersion = WinRegistry.getValue(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstallKey, "DisplayVersion" );
Object displayName = WinRegistry.getValue(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstallKey, "DisplayName" );
if( displayVersion != null && displayVersion.toString().equals(installedMysqlVersion)
&& displayName != null && displayName.toString().startsWith("MySQL Server") )
{
Util.logInfo( null, "Found match, uninstall key: " + uninstallKey );
context.setVariable( "mysqlUninstallKey", uninstallKey );
break;
}
}
这会将MySQL Server 5.1的产品代码放在mysqlUninstallKey
变量中。完成此步骤后,我有一个'运行可执行文件或批处理文件'步骤使用以下设置:
这将(在32位Windows XP上)运行MySQL服务器的安装程序,然后用户必须选择“删除”#39;手动
在64位Windows 7上,它只显示一个对话框,显示所有命令行标志及其说明,因此msiexec.exe正在启动,但我传入的参数无法识别。
知道可能出错的是什么?或者也许我这样做完全错了,有更好的方法吗?
我使用的是Install4j 4.2.8。
答案 0 :(得分:2)
感谢@ marcus-adams的评论,我明白了。您需要在install4j的“运行可执行文件或批处理文件”操作中使用'/ qn','/ x'和'{installer:mysqlUninstallKey}'作为单独的参数。如果您使用带有空格的1个参数,则它不起作用。有了它,它可以在32位和64位上运行。