Inno Setup 总是安装到管理员的 AppData 目录中 [英] Inno Setup always installs into admin's AppData directory

查看:17
本文介绍了Inno Setup 总是安装到管理员的 AppData 目录中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将我的应用程序存储在当前用户的 AppData 目录中,以避免在自动更新我们的应用程序时(当它存储在程序文件中时)出现权限问题.我们不会让用户选择安装应用程序的位置.我们收到来自非管理员用户的投诉,称安装程序将应用程序存储在管理员的 AppData 目录中(当然在 UAC 之后),而不是当前用户的 AppData 目录,这会阻止应用在未来运行.

I want to store my app in the current user's AppData directory to avoid problems with permissions we had when auto-updating our app (when it's stored in Program Files). We don't give the user the option of where to install the app. We've had complaints from non-admin users that the installer stores the app in the admin's AppData directory (after UAC of course), instead of the current user's AppData directory, which then prevents the app from running in the future.

首先,我有 DefaultDirName={userappdata}{#MyAppName}.然后我尝试了 DefaultDirName={commonappdata}{#MyAppName}.然后我与 PrivilegesRequired=lowest 一起尝试,甚至将 PrivilegesRequired=none 作为 仅在需要时使 InnoSetup 安装程序请求特权提升 问题建议.

Firstly, I had DefaultDirName={userappdata}{#MyAppName}. Then I tried DefaultDirName={commonappdata}{#MyAppName}. Then I tried that along with PrivilegesRequired=lowest and even as PrivilegesRequired=none as the Make InnoSetup installer request privileges elevation only when needed question suggested.

这是我现在的脚本,以防我遗漏了一些明显的东西:

This is my script as of right now in case I'm missing something obvious:

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

#define MyAppName "Teamwork Chat"
#define MyAppVersion "0.10.0"
#define MyAppPublisher "Digital Crew, Ltd."
#define MyAppURL "http://www.teamwork.com/"
#define MyAppExeName "TeamworkChat.exe"

[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={{0F063485-F5AF-4ADE-A9F9-661AB3BAA661}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={userappdata}{#MyAppName}
DisableDirPage=yes
DefaultGroupName={#MyAppName}
OutputDir=E:chat-clientdist
OutputBaseFilename={#MyAppName}_for_Windows32_Installer-{#MyAppVersion}
SetupIconFile=E:chat-clienticons	eamwork_chat.ico
WizardImageFile=E:chat-clienticonschatWizardImageFile.bmp
Compression=lzma
SolidCompression=yes
PrivilegesRequired=none

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

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

[Files]
Source: "E:chat-clientdistTeamworkChatwin32TeamworkChat.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:chat-clientdistTeamworkChatwin32ffmpegsumo.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:chat-clientdistTeamworkChatwin32icudtl.dat"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:chat-clientdistTeamworkChatwin32libEGL.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:chat-clientdistTeamworkChatwin32libGLESv2.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:chat-clientdistTeamworkChatwin32
w.pak"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
Name: "{commondesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

<小时>

编辑

我已经更改了两个选项,但仍然没有运气;


Edit

I've changed two options but still no luck;

PrivilegesRequired=lowest
...
[Icons]
...
Name: "{userdesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon

编辑 2:

我添加了 runasoriginaluser 标志并生成了一个新的 AppId (GUID) 但仍然没有运气;

Edit 2:

I've added the runasoriginaluser flag and generated a new AppId (GUID) but still no luck;

[Run]
Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent runasoriginaluser

编辑 3:

我创建了一个简单的 GitHub 存储库 带有源文件和 Inno 脚本.

Edit 3:

I've created a simple GitHub repository with the source files and Inno script.

我一直在 Windows 8.1 上进行测试.它似乎在 Windows 7 上编译并在 Windows 8 上运行时有效,但在 8 上编译并在 8 上运行时无效.

I had been testing on Windows 8.1. It seems to work when compiled on Windows 7, and ran on Windows 8, but not when compiled on 8 and ran on 8.

现在已经解决了,但为了解决Edit 4的问题,它不仅仅在我的机器上工作.它适用于其他 Windows 8 机器.一定是一些奇怪的缓存或其他东西(即使我更改了 AppId).

It's solved now but to clear things up regarding Edit 4, it wasn't working only on my machine. It worked on other Windows 8 machines. Must've been some weird caching or something (even though I changed the AppId).

推荐答案

根据您问题的措辞,如果我理解正确的话,这听起来像是因为您正在使用管理员帐户验证安装运行."如果是这种情况,并且您在 UAC 提示下输入不同的帐户(与您登录时使用的帐户不同),则当前用户实际上将成为您在 UAC 提示下输入的管理员帐户,而不是您登录的帐户在与.因此,只要您被要求使用 UAC 提升安装,它就不会最终出现在登录用户的 AppData 目录中.

From the wording of your question and if I am understanding you correctly, it sounds like this is because you are "validating with an admin account for the install to run." If this is the case and you are entering a different account (from that which you are logged in with) at the UAC prompt, the current user then actually becomes the Administrator account you just entered at the UAC prompt and not the account you are logged in with. Therefore, as long as you are being asked to elevate the installation using UAC, it will not end up in the logged in user's AppData directory.

您可能需要做的是使用 runasoriginaluser 函数,该函数将使用登录的用户凭据而不是您在 UAC 提示中输入的帐户,或者查找导致 UAC 提升提示的原因.

What you may need to do is use the runasoriginaluser function, which will use the logged in user credentials instead of the account you entered at the UAC prompt, or find what is causing the UAC elevation prompt.

另见 Inno Setup 为登录用户(非管理员用户)创建注册表项.

关于 的 MSDN 文档安装上下文也可能有用.

这篇关于Inno Setup 总是安装到管理员的 AppData 目录中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆