【问题标题】:ExePackage does not run elevated although PerMaschine is set to "yes"尽管 PerMaschine 设置为“yes”,但 ExePackage 没有运行提升
【发布时间】:2015-08-09 05:01:21
【问题描述】:

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

它执行一个控制台应用程序,该应用程序尝试打开对 HKLM-Registry 条目的写入,该条目在从捆绑包中触发时失败。在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>

有什么可以阻止这个包以我不知道的提升权限执行的吗?另外,有没有办法让应用的控制台输出(console-log)进入捆绑日志以便更好地调试?

编辑

这是 Bundle-Log 中关于 ExePackage 执行的一个例外:

[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.

【问题讨论】:

  • 您使用的是哪个版本的 WIX?您能否发布刻录日志中显示运行ExePackage 的刻录引擎的部分?您是否有具体证据表明 ExePackage 没有被提升?
  • 感谢您的回复。我已经发布了日志的摘录。不,我没有具体证据,但取消管理员权限是重现我所知道的行为的唯一方法......

标签: wix bootstrapper elevated-privileges


【解决方案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 句柄没有连接到调用中的任何内容,因此所有输出都丢失了。

【讨论】:

  • 感谢您的回答。至于InstallCommand,这实际上只是我的复制粘贴失败,我刚刚在问题中更正了。我的应用程序(Environment.Exit(3))肯定会返回错误代码...
  • 你是对的,它以提升的权限运行。这不是问题所在。谢谢!
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2015-06-01
  • 2018-03-23
  • 1970-01-01
  • 2023-04-10
  • 2018-10-24
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多