尽管PerMaschine设置为" yes"但ExePackage不会提升。

时间:2015-05-27 08:19:54

标签: wix bootstrapper elevated-privileges

在我的WIX-Bundle中,我有ExePackage,如下所示:

它执行一个ConsoleApplication,它试图打开对HKLM-Registry条目的写入,该条目在从bundle中触发时失败。在cmd中,当以管理员身份执行时,一切正常:

<ExePackage Id="SqlServerAuthConfig"
                  DisplayName="Configuration of SQL-Server Auth-Mode"
                  Compressed="yes"
                  PerMachine="yes"
                  Vital="yes"
                  Name="DatabaseMigrator.exe"
                  SourceFile="Migrator/DatabaseMigrator.exe"
                  InstallCommand="-ac -s &quot;localhost\SQLEXPRESS&quot;>
    <Payload Compressed="yes" SourceFile="Migrator/Common.dll" />
    <Payload Compressed="yes" SourceFile="Migrator/NPoco.dll" />
    <Payload Compressed="yes" SourceFile="Migrator/NLog.dll" />
</ExePackage>

是否有任何可以防止此程序包被我不知道的高级权限执行?另外,有没有办法将应用程序的econsole-output(控制台日志)放入捆绑日志中以便更好地进行调试?

修改

这是关于执行ExePackage

的Bundle-Log之外的内容
[1760:1510][2015-05-27T08:14:26]i301: Applying execute package: SqlServerAuthConfig, action: Install, path: C:\ProgramData\Package Cache\55E9EE89B506B4D626529F73B05E246CA13BE84B\DatabaseMigrator.exe, arguments: '"C:\ProgramData\Package Cache\55E9EE89B506B4D626529F73B05E246CA13BE84B\DatabaseMigrator.exe" -ac -s "localhost\SQLEXPRESS"'
[1760:1510][2015-05-27T08:14:30]e000: Error 0x80070003: Process returned error: 0x3
[1760:1510][2015-05-27T08:14:30]e000: Error 0x80070003: Failed to execute EXE package.
[091C:0094][2015-05-27T08:14:30]e000: Error 0x80070003: Failed to configure per-machine EXE package.
[091C:0094][2015-05-27T08:14:30]i319: Applied execute package: SqlServerAuthConfig, result: 0x80070003, restart: None
[091C:0094][2015-05-27T08:14:30]e000: Error 0x80070003: Failed to execute EXE package.

1 个答案:

答案 0 :(得分:1)

我不认为问题与DatabaseMigrator.exe没有升级有关。刻录引擎使用WIN32 API CreateProcess()来运行ExePackage,因此ExePackage运行与刻录引擎相同的权限提升,即“管理员”。

运行执行包SqlServerAuthConfig的返回值是:0x3。这可能是WIN32错误或从控制台程序的主函数返回的值。作为WIN32错误,值0x3对应于“系统找不到指定的路径。”,可以来自CreateProcess()或来自DatabaseMigrator.exe。建议双重检查与DatabaseMigrator.exe相关的文件路径。

InstallCommand属性看起来不太好。应该是:

InstallCommand="-ac -s &quot;localhost\SQLEXPRESS&quot;">

有没有办法获得控制台输出?对于WIX 3.9及更早版本,这是不可能的。刻录引擎使用WIN32 API函数CreateProcess()来运行ExePackage,但hStdInputhStdOutputhStdError句柄未连接到任何内容打电话,所有输出都丢失了。