首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Inno Setup在文件上设置‘以管理员身份运行’

如何使用Inno Setup在文件上设置‘以管理员身份运行’
EN

Stack Overflow用户
提问于 2013-06-07 15:50:00
回答 3查看 34K关注 0票数 13

我正在使用Inno Setup创建一个安装程序。作为安装过程的一部分,我将安装Tomcat。在Windows 7上,我遇到了下面描述的问题:

http://blog.paulbouwer.com/2010/10/23/the-case-of-the-annoying-tomcat-6-monitor/

我可以通过在tomcat7w.exe上手动设置“以管理员身份运行”来修复它(对于tomcat7,这个问题和根本原因也是一样的),但我不知道如何通过Inno设置来做到这一点。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-07 18:46:28

您可以在[Registry]部分中添加注册表项,以将run as Administrator设置为运行此应用程序的默认操作。

示例:

代码语言:javascript
复制
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
票数 18
EN

Stack Overflow用户

发布于 2017-01-07 03:43:31

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

代码语言:javascript
复制
[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
  AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')
代码语言:javascript
复制
[Code]

procedure SetElevationBit(Filename: string);
var
  Buffer: string;
  Stream: TStream;
begin
  Filename := ExpandConstant(Filename);
  Log('Setting elevation bit for ' + Filename);

  Stream := TFileStream.Create(FileName, fmOpenReadWrite);
  try
    Stream.Seek(21, soFromBeginning);
    SetLength(Buffer, 1);
    Stream.ReadBuffer(Buffer, 1);
    Buffer[1] := Chr(Ord(Buffer[1]) or $20);
    Stream.Seek(-1, soFromCurrent);
    Stream.WriteBuffer(Buffer, 1);
  finally
    Stream.Free;
  end;
end;

这是基于:

MS-SHLLINK中的

已在Unicode版本的Inno安装程序上测试。但是,更自然的是,它应该也可以在Ansi版本上工作,尽管你无论如何都要。

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

如果安装程序以管理员权限运行,则只需添加runascurrentuser flag

代码语言:javascript
复制
[Run]
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \
    Flags: postinstall nowait skipifsilent runascurrentuser 

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

代码语言:javascript
复制
[Run]
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \
    Flags: postinstall nowait skipifsilent shellexec

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

请参阅Application does not work when installed with Inno Setup

票数 13
EN

Stack Overflow用户

发布于 2016-01-19 22:41:48

[Run]部分添加runascurrentuser标志属性

代码语言:javascript
复制
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent; 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16978917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档