我正在使用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将其标记为“以管理员身份运行”,而不是实际运行它。
发布于 2013-06-07 18:46:28
您可以在[Registry]部分中添加注册表项,以将run as Administrator设置为运行此应用程序的默认操作。
示例:
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发布于 2017-01-07 03:43:31
如果您确实想要设置快捷方式的“以管理员身份运行”标志(与强制目标应用程序以管理员权限运行相反),您可以使用以下代码:
[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')[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
[Run]
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent runascurrentuser 如果安装程序在没有管理员权限的情况下运行,请将Verb parameter设置为runas (为此,您还需要shellexec标志):
[Run]
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent shellexec不过,请确保您有充分的理由使用管理员权限运行应用程序。用户应用程序不需要管理员权限。如果他们需要它,这通常是一个糟糕的设计的标志。希望应用程序以管理员权限运行的一个常见(不好)原因是,应用程序需要写入其安装文件夹。
发布于 2016-01-19 22:41:48
向[Run]部分添加runascurrentuser标志属性
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent; https://stackoverflow.com/questions/16978917
复制相似问题