0

我正在努力让我的安装程序启动一个新安装的可执行文件(用 C# 编写)。无论我尝试做什么,它都会记录 1721 错误。有效的是: 1. 我运行安装程序 2. 等待它失败 3. 从它安装到的位置启动 exe,使用 /l*v 生成的日志文件中记录的命令行参数

因此,该文件似乎已安装到具有所有有效数据和文件权限的正确位置。它只是没有在正确的用户帐户下运行(也许)?

有任何想法吗?

4

1 回答 1

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> ...
于 2015-08-19T06:25:45.123 回答