我很难让我的安装程序启动一个新安装的可执行文件(用C#编写)。无论我尝试做什么,它都会记录1721错误。有效的是: 1.我运行安装程序 2.等待它失败 3.使用/ l * v生成的日志文件中记录的命令行参数从其安装位置启动exe
因此,该文件似乎安装在具有所有有效数据和文件权限的正确位置。它只是不在正确的用户帐户下运行(可能)?
有什么想法吗?
答案 0 :(得分:0)
起初我通过这样做解决了这个问题:
<CustomAction Id="DbInstallerExec" Directory="SETUPFOLDER" Impersonate="yes" Execute="deferred" ExeCommand='"[SETUPFOLDER]DBInstaller.exe" [DB_SERVER] [DB_DATABASE] [PPME_BASE_DATA_FOLDER] [%TEMP] [SETUPFOLDER] ImportData SqlScripts' Return="check" />
让Directory属性看起来至少让可执行文件启动,然后它无法执行某些操作并仍然返回错误代码。为了解决这个问题,我将Impersonate更改为“是”。
我的第二次改进尝试如下:
(这允许控制台应用程序从视图中隐藏启动,这似乎更专业)
出于某种原因,WixQuietExec(使用SetProperty)对我不起作用,但CAQuietExec确实有效:
<CustomAction Id="DbInstallerExec_Cmd" Property="DbInstallerExec" Value='"[SETUPFOLDER]DBInstaller.exe" [DB_SERVER] [DB_DATABASE] [PPME_BASE_DATA_FOLDER] [%TEMP] [SETUPFOLDER] ImportData SqlScripts' /> <CustomAction Id="DbInstallerExec" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Impersonate="yes" Return="check" /> <InstallExecuteSequence> ... <Custom Action="DbInstallerExec_Cmd" Before="DbInstallerExec"> UPGRADINGPRODUCTCODE OR (NOT REMOVE = "ALL") </Custom> <Custom Action="DbInstallerExec" Before="InstallFinalize"> UPGRADINGPRODUCTCODE OR (NOT REMOVE = "ALL") </Custom> </InstallExecuteSequence> ...