提问人:Kostas Markakis 提问时间:10/23/2023 最后编辑:Martin PrikrylKostas Markakis 更新时间:10/31/2023 访问量:63
在“所有用户”模式下的 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
问:
我在使用 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
答:
您正在安装和运行的文件是 ,定义为 。这似乎是一个 32 位应用程序。{#gei}
#define gei "Setup 0.0.0.exe"
UAC 具有安装程序检测功能,该检测将应用程序标识为安装程序,原因是
文件名包含“安装”、“设置”或“更新”等关键字。
从而显示 UAC 对话框,要求提供凭据。
解决 方案:
a) 重命名应用程序,并且不包含任何上述术语
b) 使其成为 64 位应用程序
如果仍需要管理员权限,请检查程序集清单,并确保未将其设置为 。requireAdministrator
与管理员“盾牌”无关。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
评论