在“所有用户”模式下的 Inno Setup 安装在尝试执行已安装的软件时,仍然需要非管理员用户的管理员权限

Inno Setup installation in "All users" mode still requires Admin privileges for the non-Admin user when trying to execute the installed software

提问人:Kostas Markakis 提问时间:10/23/2023 最后编辑:Martin PrikrylKostas Markakis 更新时间:10/31/2023 访问量:63

问:

我在使用 Inno Setup 打包软件时遇到以下问题。

我正在使用以下选项来允许用户为所有用户或当前用户选择安装。

PrivilegesRequiredOverridesAllowed=dialog

现在,作为管理员,我选择为“所有用户”安装。当然,并非所有“其他用户”都是管理员。

我安装到 .然后,当我使用访客用户登录时,我希望在没有管理员权限的情况下运行已安装的软件。创建的桌面图标仍然在右下角有这个“盾牌”,它要求管理员密码来运行软件。Program Files

在我的情况下,“所有用户”安装选项似乎意味着“所有管理员用户”。

我正在附加我的setup.iss文件。我尝试过使用各种不同的选项,但没有任何效果。

我的问题是否与 Inno Setup 创建的桌面图标有关,还是与该部分中的选项有关? 我很确定我在选项中遗漏了一些东西。[Setup]

[Setup]
DefaultDirName={autopf}\Pattern 3.x
PrivilegesRequiredOverridesAllowed=dialog
UsePreviousPrivileges=no

[Types]
Name: "custom"; Description: "Custom installation"; Flags: iscustom

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

[Components]
Name: "GEI"; Description: "GEI {#gei_version}"; Flags: checkablealone disablenouninstallwarning
Name: "GEP"; Description: "GEP {#SetupSetting("AppVersion")}"; Flags: checkablealone disablenouninstallwarning

[Files]
Source: ".\UninsIS.dll"; Flags: dontcopy
Source: ".\UninsIS.dll"; DestDir: "{code:GetDataDir}"; Check: Is64BitInstallMode()
Source: ".\UninsIS.dll"; DestDir: "{code:GetDataDir}"; Check: not Is64BitInstallMode()
;Source: ".\Softwares\{#gei}"; DestDir: {code:GetDataDir}; Flags: deleteafterinstall nocompression; Components: GEI
;Source: ".\GEP - Installation Guide.pdf"; DestDir: {code:GetDataDir}; Flags: ignoreversion sign recursesubdirs; Components: GEP
Source: ".\GEP\*"; DestDir: {code:GetDataDir}; Flags: ignoreversion sign recursesubdirs; Components: GEP

[Icons]
Name: "{group}\Pattern {#SetupSetting("AppVersion")}"; Filename: "{code:GetDataDir}\Pattern.exe"; Parameters: "--from_desktop"
Name: "{group}\{cm:UninstallProgram,Pattern {#SetupSetting("AppVersion")}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\Pattern {#SetupSetting("AppVersion")}"; Filename: "{code:GetDataDir}\Pattern.exe"; Parameters: "--from_desktop"

[Run]
Filename: "{code:GetDataDir}\{#gei}"; Parameters: "/min"; StatusMsg: "Installing GEI... please wait..."; Flags: runhidden; Components: GEI
;Filename: "{code:GetDataDir}\GEP - Installation Guide.pdf"; Tasks: StartAfterInstall; Flags: shellexec runasoriginaluser skipifdoesntexist

[Registry]
Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{code:GetDataDir}\Pattern.exe"; ValueData: "~RUNASADMIN"; Flags: uninsdeletekey noerror
安装 inno-setup admin uac

评论


答:

-1赞 Thomas Weller 10/23/2023 #1

您正在安装和运行的文件是 ,定义为 。这似乎是一个 32 位应用程序。{#gei}#define gei "Setup 0.0.0.exe"

UAC 具有安装程序检测功能,该检测将应用程序标识为安装程序,原因是

文件名包含“安装”、“设置”或“更新”等关键字。

从而显示 UAC 对话框,要求提供凭据。

解决 方案:

a) 重命名应用程序,并且不包含任何上述术语

b) 使其成为 64 位应用程序

如果仍需要管理员权限,请检查程序集清单,并确保未将其设置为 。requireAdministrator

3赞 Martin Prikryl 10/23/2023 #2

与管理员“盾牌”无关。PrivilegesRequiredOverridesAllowed

您可以使用以下代码自行显式添加“盾牌”:

[Registry]
Root: "HKLM"; \
    Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
    ValueType: String; ValueName: "{code:GetDataDir}\Pattern.exe"; \
    ValueData: "~RUNASADMIN"; Flags: uninsdeletekey noerror

如果只想为管理员安装添加“盾牌”,请使用 Check 参数查询 IsAdminInstallMode

Check: IsAdminInstallMode

评论

0赞 Kostas Markakis 10/24/2023
谢谢,我对注册表行的实际作用感到困惑。我添加它是为了禁止用户选中“以管理员身份运行”选项。显然,默认情况下,它还激活了此选项。