Windows installer Windows安装程序自定义操作错误1631

Windows installer Windows安装程序自定义操作错误1631,windows-installer,exe,custom-action,Windows Installer,Exe,Custom Action,我正在为产品创建msi安装程序,安装后需要在浏览器中启动web url。我使用WIX3.5创建安装程序(但这可能并不重要)。 我在notwork-installer日志中找到的示例 “操作于15:27:30结束:启动浏览器。返回值1631。” 我在互联网上看到很多关于这个问题的帖子,但没有人提供解决方案(有人发现了多语言的问题,有人联系微软解决了这个问题) 我只能猜测问题出在Windows7的安全性上(我遇到了这个问题)。可能windows installer被禁止启动exe文件(我用其他exe

我正在为产品创建msi安装程序,安装后需要在浏览器中启动web url。我使用WIX3.5创建安装程序(但这可能并不重要)。 我在notwork-installer日志中找到的示例

“操作于15:27:30结束:启动浏览器。返回值1631。”

我在互联网上看到很多关于这个问题的帖子,但没有人提供解决方案(有人发现了多语言的问题,有人联系微软解决了这个问题)

我只能猜测问题出在Windows7的安全性上(我遇到了这个问题)。可能windows installer被禁止启动exe文件(我用其他exe-s尝试了许多其他示例,但都得到了相同的结果)


有人有一个通用的解决方案吗?

我想问题确实出在UAC安全方面。 要授予自定义Action管理权限,我们应将其设置为不同的,如下所示:

<CustomAction Id="LaunchBrowser" Directory="TARGETDIR" Impersonate="no" Execute="deferred" ExeCommand="[BrowserExePath] [LaunchingUrl]" Return="check"/>


我强烈推荐自定义操作—它完全改变了我对它们的看法。

以下是我在安装和卸载时所做的操作

起初,我还得到了“returnvalue1631”,并花了大量时间处理UAC安全性、提升权限、imposate=“yes”和Execute=“deferred”,但这些都不起作用

但最终,当我正确设置Directory=“TARGETDIR”而不是BinaryKey=“WixCA”时,它得到了非常简单的修复


...
未安装也未删除
删除~=“全部”
...

您正在使用哪种类型的自定义操作?您是否尝试过使用ShellExecute启动URL的简单EXE?我在异步模式下运行的Type50自定义操作(无需等待完成)中遇到了相同的问题,因此它实际上是242类型。它曾经在Server2008R20之前的Windows版本中工作过,只是在执行操作时发生了更改吗?我相信设置Impersonate=“no”实际上会更改权限,因为它使CA使用系统帐户运行。此外,我还发现1631错误的一大原因是不正确使用双引号。某些字符串不应使用双引号(例如,要运行的EXE的路径),而其他字符串可能需要使用双引号(例如,放入EXECOMAND的参数)。不,不同的操作是唯一获得提升权限的操作。你应该阅读我在回答中推荐的博客文章,了解这一点以及定制操作的许多其他细微差别
<Product>

...

<CustomAction Id="LaunchBrowserInstall" Directory="TARGETDIR" Execute="immediate" Impersonate="yes" Return="asyncNoWait" ExeCommand="explorer.exe https://www.example.com/post_install/" />

    <CustomAction Id="LaunchBrowserUninstall" Directory="TARGETDIR" Execute="immediate" Impersonate="yes" Return="asyncNoWait" ExeCommand="explorer.exe https://www.example.com/post_uninstall/" />

    <InstallExecuteSequence>
        <Custom Action="LaunchBrowserInstall" After="InstallFinalize">NOT Installed AND NOT REMOVE</Custom>
        <Custom Action="LaunchBrowserUninstall" After="InstallFinalize">REMOVE ~= "ALL"</Custom>
    </InstallExecuteSequence>

...

</Product>