如何通过 Inno Tool(或其他安装工具)安装具有默认管理员权限的应用程序?

问题描述 投票:0回答:1

安装 inno 工具后,我的应用程序 exe 文件失去了管理员权限。

我实现了一个基于Python的应用程序,它在运行时需要Windows管理员权限。如果我创建应用程序包并使用管理员权限配置 exe 文件(右键单击 exe -> 属性 -> 兼容性 -> 更改所有用户的设置 -> 以管理员身份运行此程序)。一切正常,所以如果我执行 exe,它将以管理员权限启动。

但是如果我用管理员权限配置exe(如上所述)并通过Inno Tool生成setup.exe,则exe文件在安装后会丢失其管理员配置。所以app exe执行后始终具有普通用户权限。 “以管理员身份运行此程序”复选框消失了。当然,用户可以手动设置“以管理员身份运行此程序”配置,但这确实不专业。

有谁知道我在哪里犯了错误,或者还有其他方法可以做到这一点吗?

注:
1-我的Inno setup exe也有管理员权限。
2-这是我的 inno 配置:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName “myapp”
#define MyAppVersion "1.0"
#define MyAppPublisher "myapp"
#define MyAppURL “xxx”
#define MyAppExeName "myapp.exe"
#define MyAppAssocName MyAppName + ""
#define MyAppAssocExt ".myp"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do
not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FE606755-5D39-4622-818E-81EA7E058357}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=C:\Program Files (x86)\{#MyAppName}
DisableDirPage=yes
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install
mode (install for current user only.)
PrivilegesRequired=admin
OutputDir=C:\Blocker\myapp\setup
OutputBaseFilename=myapp
SetupIconFile=C:\Blocker\myapp\setup\modern.ico
Compression=zip
; SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "armenian"; MessagesFile: "compiler:Languages\Armenian.isl"
Name: "brazilianportuguese"; MessagesFile:
"compiler:Languages\BrazilianPortuguese.isl"
Name: "bulgarian"; MessagesFile: "compiler:Languages\Bulgarian.isl"
Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl"
Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}";
GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Blocker\myapp\myapp\{#MyAppExeName}"; DestDir:
"{app}"; Flags: ignoreversion
Source: "C:\Blocker\myapp\myapp\*"; DestDir: "{app}";
Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Registry]
Root: HKA; Subkey:
"Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType:
string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags:
uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType:
string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags:
uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon";
ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
Root: HKA; Subkey:
"Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType:
string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
Root: HKA; Subkey:
"Software\Classes\Applications\{#MyAppExeName}\SupportedTypes";
ValueType: string; ValueName: ".myp"; ValueData: ""
Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows
NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String;
ValueName: "{app}\{#MyAppExeName}"; \
   ValueData: "~RUNASADMIN"; Flags: uninsdeletekey noerror

[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Tasks: desktopicon
python-3.x windows installation inno-setup admin
1个回答
0
投票

兼容性参数不会存储到 .exe 文件中(请注意,当您设置参数时,.exe 不会更改)。这些参数存储在 Windows 注册表中,并且特定于特定的 .exe 路径。如果您将 .exe 移动到其他地方(仅移动到另一台计算机),则这些参数不再适用。
请参阅https://superuser.com/q/1248078/213663
兼容性参数适用于不再维护的遗留应用程序。不适用于新应用程序。

如果应用程序需要管理员权限,则应自行请求(通过应用程序清单或以编程方式):
如何让我的程序在执行时要求管理员权限

此外,请确保您的应用程序有正当理由需要管理员权限。而不是这里描述的蹩脚原因:
使用 Inno Setup 安装时应用程序无法运行

© www.soinside.com 2019 - 2024. All rights reserved.