Inno setup 如何使用Inno安装程序在文件上设置“以管理员身份运行”

Inno setup 如何使用Inno安装程序在文件上设置“以管理员身份运行”,inno-setup,elevated-privileges,Inno Setup,Elevated Privileges,我正在使用Inno安装程序创建安装程序。作为安装过程的一部分,我正在安装Tomcat。在Windows 7上,我遇到以下问题: 我可以通过在tomcat7w.exe上手动设置“以管理员身份运行”来修复此问题。tomcat7的问题和根本原因也是一样的,但我不知道如何通过Inno安装程序来解决 我正在寻找解释以管理员身份运行某些_program.exe的线程,但这里的程序是在Tomcat服务启动时启动的,例如在机器启动时,因此我需要一种方法,使用Inno Setup将其标记为“以管理员身份运行”,而

我正在使用Inno安装程序创建安装程序。作为安装过程的一部分,我正在安装Tomcat。在Windows 7上,我遇到以下问题:

我可以通过在tomcat7w.exe上手动设置“以管理员身份运行”来修复此问题。tomcat7的问题和根本原因也是一样的,但我不知道如何通过Inno安装程序来解决


我正在寻找解释以管理员身份运行某些_program.exe的线程,但这里的程序是在Tomcat服务启动时启动的,例如在机器启动时,因此我需要一种方法,使用Inno Setup将其标记为“以管理员身份运行”,而不是实际运行。

您可以在[Registry]中添加注册表项将以管理员身份运行设置为运行此应用程序的默认操作的节

例如:

Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
    ValueType: String; ValueName: "{app}\tomcat7w.exe"; ValueData: "RUNASADMIN"; \
    Flags: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.1
将runascurrentuser标志属性添加到[Run]部分


如果您确实希望将快捷方式的“以管理员身份运行”标志设置为与强制以管理员权限运行目标应用程序相反,则可以使用以下代码:

[图标] 名称:{userdesktop}\My程序;文件名:{app}\MyProg.exe\ 安装后:SetElevationBit'{userdesktop}\My Program.lnk' [守则] 过程SetElevationBitFilename:字符串; 变量 缓冲区:字符串; 溪流:尖沙咀;; 开始 文件名:=ExpandConstantFilename; 日志'为'+文件名设置提升位; Stream:=TFileStream.CreateFileName,fmOpenReadWrite; 尝试 Stream.Seek21,从开始; SetLengthBuffer,1; Stream.ReadBufferBuffer,1; 缓冲区[1]:=ChrOrdBuffer[1]或$20; Stream.Seek-1,soFromCurrent; Stream.WriteBufferBuffer,1; 最后 免费; 终止 终止 这是基于:

[MS-SHLLINK]:Shell Link.LNK二进制文件格式; ; 在Unicode版本的Inno安装程序上测试。但是,更自然的是,它也应该适用于Ansi版本,尽管你无论如何

如果您希望允许用户在安装结束时使用[Run]部分中的postinstall条目执行程序,当然需要显式请求提升

如果安装程序以管理员权限运行,您只需添加:

如果安装程序在没有管理员权限的情况下运行,请将其设置为runas,您还需要shellexec标志:

不过,请确保您有充分的理由以管理员权限运行应用程序。用户应用程序不需要管理员权限。如果他们需要,这通常是一个糟糕设计的标志。希望应用程序以管理员权限运行的一个常见错误原因是应用程序需要写入其安装文件夹


请参见

您可以在[Registry]部分添加注册表项,该注册表项将设置为以管理员身份运行,作为此应用程序运行的默认操作。e、 根:HKLM;子项:软件\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\;ValueType:字符串;ValueName:{app}\tomcat7w.exe;ValueData:RUNASADMIN;标志:UnisDeleteKeyIfEmpty UnisDeleteValue;MinVersion:0,6.1的可能副本工作正常,谢谢。我现在明白了,我应该在几个小时前发布这个问题:。如果你愿意,把评论贴出来作为回答,这样我就可以接受了。再次感谢mm,应用程序兼容性不应该在服务中发挥作用。它们将运行为它们所配置的任何用户,通常是管理员或本地机器。兼容性设置是创可贴,而不是适当的解决方案。在这种情况下,正确的解决方案可能是首先使用管理员凭据将其作为服务运行。将在安装结束时以管理员身份正确启动可执行文件,但不会使桌面的快捷方式以管理员身份启动。@Winter我根据回答添加了runascurrentuser,执行时它向我询问权限从快捷方式中删除应用程序。Inno Setup 6.0.2对于Inno开发者:如果[Run]部分中的postinstall条目实际上是另一个Inno Setup可执行文件,请定义一个标志来捕获失败子进程的返回代码,并选择X将其发送到父安装的.return code。@LaurieStearn为什么在此处发布功能请求?将其发布在Inno安装站点上。。无论如何都应该是XOR。进步的变通办法。
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent; 
[Run]
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \
    Flags: postinstall nowait skipifsilent runascurrentuser 
[Run]
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \
    Flags: postinstall nowait skipifsilent shellexec