尽管 PerMaschine 设置为 "yes",但 ExePackage 并未 运行 提升
ExePackage does not run elevated although PerMaschine is set to "yes"
在我的 WIX-Bundle 中,我有一个 ExePackage
如下所示:
它执行一个 ConsoleApplication,它试图打开对 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 "localhost\SQLEXPRESS">
<Payload Compressed="yes" SourceFile="Migrator/Common.dll" />
<Payload Compressed="yes" SourceFile="Migrator/NPoco.dll" />
<Payload Compressed="yes" SourceFile="Migrator/NLog.dll" />
</ExePackage>
有没有什么可以阻止这个包以我不知道的提升权限执行?另外,有没有办法将应用程序的控制台输出(控制台日志)放入捆绑日志中以便更好地调试?
编辑
这是 Bundle-Log 中关于执行 ExePackage
:
的例外情况
[1760:1510][2015-05-27T08:14:26]i301: Applying execute package: SqlServerAuthConfig, action: Install, path: C:\ProgramData\Package CacheE9EE89B506B4D626529F73B05E246CA13BE84B\DatabaseMigrator.exe, arguments: '"C:\ProgramData\Package CacheE9EE89B506B4D626529F73B05E246CA13BE84B\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.
我认为问题与 DatabaseMigrator.exe
无关,与 运行ning 提升无关。刻录引擎使用 WIN32 API CreateProcess()
到 运行 ExePackage
,因此 ExePackage
运行 与刻录引擎具有相同的权限提升, 即 "Administrator".
来自 运行 执行包 SqlServerAuthConfig
的 return 值是:0x3。这可能是 WIN32 错误或从控制台程序的主要功能中编辑的值 return。作为 WIN32 错误,值 0x3 对应于 "The system cannot find the path specified.",它可能来自 CreateProcess()
或来自 DatabaseMigrator.exe
。建议仔细检查与 DatabaseMigrator.exe
.
相关的文件路径
InstallCommand
属性看起来格式不正确。应该是:
InstallCommand="-ac -s "localhost\SQLEXPRESS"">
有没有办法获取控制台输出?对于 WIX 3.9 及更早版本,这是不可能的。烧录引擎使用WIN32API函数CreateProcess()
到运行ExePackage
,但是hStdInput
、hStdOutput
和hStdError
句柄没有连接到呼叫中的任何东西,所以所有输出都丢失了。
在我的 WIX-Bundle 中,我有一个 ExePackage
如下所示:
它执行一个 ConsoleApplication,它试图打开对 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 "localhost\SQLEXPRESS">
<Payload Compressed="yes" SourceFile="Migrator/Common.dll" />
<Payload Compressed="yes" SourceFile="Migrator/NPoco.dll" />
<Payload Compressed="yes" SourceFile="Migrator/NLog.dll" />
</ExePackage>
有没有什么可以阻止这个包以我不知道的提升权限执行?另外,有没有办法将应用程序的控制台输出(控制台日志)放入捆绑日志中以便更好地调试?
编辑
这是 Bundle-Log 中关于执行 ExePackage
:
[1760:1510][2015-05-27T08:14:26]i301: Applying execute package: SqlServerAuthConfig, action: Install, path: C:\ProgramData\Package CacheE9EE89B506B4D626529F73B05E246CA13BE84B\DatabaseMigrator.exe, arguments: '"C:\ProgramData\Package CacheE9EE89B506B4D626529F73B05E246CA13BE84B\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.
我认为问题与 DatabaseMigrator.exe
无关,与 运行ning 提升无关。刻录引擎使用 WIN32 API CreateProcess()
到 运行 ExePackage
,因此 ExePackage
运行 与刻录引擎具有相同的权限提升, 即 "Administrator".
来自 运行 执行包 SqlServerAuthConfig
的 return 值是:0x3。这可能是 WIN32 错误或从控制台程序的主要功能中编辑的值 return。作为 WIN32 错误,值 0x3 对应于 "The system cannot find the path specified.",它可能来自 CreateProcess()
或来自 DatabaseMigrator.exe
。建议仔细检查与 DatabaseMigrator.exe
.
InstallCommand
属性看起来格式不正确。应该是:
InstallCommand="-ac -s "localhost\SQLEXPRESS"">
有没有办法获取控制台输出?对于 WIX 3.9 及更早版本,这是不可能的。烧录引擎使用WIN32API函数CreateProcess()
到运行ExePackage
,但是hStdInput
、hStdOutput
和hStdError
句柄没有连接到呼叫中的任何东西,所以所有输出都丢失了。