我有一个需要创建在安装我的文档目录中的文件的程序。 这是一个严格的固定要求,也没有改变这一点。 问题是,如果用户不“以管理员身份运行”的安装文件,innosetups恒{}用户文档指向的管理员文档目录不是原来的登录的用户。
因此,Google搜索,发现这个:
通过在Windows Vista / 7的Inno Setup的安装文件到原始用户的我的文档文件夹中
答案是错的,但是,因为innosetup甚至指出,
如果用户通过右键单击它的EXE文件并选择“以管理员身份运行”启动安装程序,那么这个标志,不幸的是,不会有任何影响,因为安装程序没有机会与原始用户凭据运行任何代码。 如果安装程序是从已经升高的进程中启动也是如此。 但是请注意,这不是一个具体的Inno设置,限制; 基于Windows Installer的安装程序不能返回到原来的用户凭据无论是在这样的情况下。
我想我可以鼓励用户不使用以管理员身份运行,但我不知道如何阻止他在升高不来了。
我(之后安装)的思维也许有程序本身建立在第一次运行时我的文档\程序名目录。 将这种解决方法的工作? 它不得不从它的程序文件目录为潜在限制用户复制文件。 是否有可能或者我会碰上priveleges问题?
这个问题的答案,原来是有效的,但不推荐。 当运行安装程序, RunAsOriginalUser
将作为当前登录到Windows的用户运行。 这是通过unelevated安装运行的一部分完成,然后运行升高做实际安装另一个副本。
当用户不明确“以管理员身份运行”,在“unelevated存根”运行升高,以及,在这种情况下,有没有因为该信息已经被替换的设置可以做访问原来的用户。
接受的做法是做任何配置文件应用程序本身的具体工作如你所说,这也意味着它会为其他用户和预Vista中的LUA环境(在这里您将不得不正是你看到同样的情形工作现在)。
首先,确保安装程序不会要求它自己的特权提升,通过设置PrivilegesRequired=lowest
:
[Setup]
PrivilegesRequired=lowest
要中止安装程序,当安装程序运行“作为管理员”明确用户,在Windows Vista和较旧的,使用IsAdmin
功能 (或IsAdminInstallMode
或IsAdminLoggedOn
在[旧版本]) InitializeSetup
:
[Code]
function InitializeSetup(): Boolean;
begin
Result := True;
if (GetWindowsVersion >= $05010000) and
IsAdmin then
begin
MsgBox('Do not run this installer "As Administrator".', mbError, MB_OK);
Result := False;
end;
end;
有关主题的更多讨论,请参阅通过在Windows Vista / 7的Inno Setup的安装文件到原始用户的我的文档文件夹中 。
这篇文章可能会提供你如何解决标高一些指导,
http://www.codeproject.com/Articles/18946/High-elevation-can-be-bad-for-your-application-How
一般来说,它给你一个机会,在安装结束海拔不执行你的可执行文件(这下我的文档创建的文件)。
文章来源: How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'