[英]Adding an application manifest with requireAdministrator breaks Installshield custom action
@All, @所有,
I was successful in adding and running a custom action see ( Be able to pass the installation directory with a custom installshield setup ) 我成功添加并运行了自定义操作,请参见( 能够通过自定义installshield安装程序传递安装目录 )
This application needs to run with Administrator rights so I added these (add an application manifest to my c# application and set the following execution level '<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />'
此应用程序需要以管理员权限运行,因此我添加了这些权限(将应用程序清单添加到我的C#应用程序中,并设置以下执行级别
'<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />'
When rebuilding the setup and deploying it on the same machine I now get the message that the file cannot be found see the image below 当重建设置并将其部署到同一台计算机上时,我现在收到消息,提示找不到文件,请参见下图
App.manifest App.manifest
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with.
Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
<!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
<!-- If your application is designed to work with Windows 8.1, uncomment the following supportedOS node-->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>
Any help is greatly appreciated. 任何帮助是极大的赞赏。
任何自定义操作都不会以提升的特权(管理员)运行,这可能是失败的原因。
Assuming your custom action directly launches an .exe file, Windows Installer uses CreateProcess rather than ShellExecute behind the scenes, and this does not elevate during the process launch. 假设您的自定义操作直接启动.exe文件,则Windows Installer在幕后使用CreateProcess而不是ShellExecute,并且在启动过程中不会升高。 So that means you have to use a custom action scheduling that is already elevated.
因此,这意味着您必须使用已经提升的自定义操作计划。
In the limited edition, only the two scheduling locations "After Register Product" and "After System Changes" are elevated. 在限量版中,只有两个计划位置“注册产品之后”和“系统更改之后”被提升。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.