通过Windows Vista / 7上的Inno Setup将文件安装到原始用户的My Docs文件夹
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Windows Vista / 7上的Inno Setup将文件安装到原始用户的My Docs文件夹相关的知识,希望对你有一定的参考价值。
在Inno Setup脚本的[Run]
部分,有一个标志runasoriginaluser
,允许脚本以原始用户身份运行进程:
生成的进程将使用最初启动安装程序的用户(通常是非提升的)凭据(即“UAC前对话框”凭据)执行。
{userdocs}
shell文件夹常量是否有等效的标志或解决方法?
这显然是Inno Setup(以及其他安装程序)的一个已知限制,但我希望有人知道解决方法。
摘自Inno Setup帮助文件:
“用户”常量指的是运行安装程序的用户的配置文件。此用户通常与当前登录的用户不同,因此请谨慎使用“用户”常量。
我想到的解决方法是使用外部脚本执行数据复制并使用ExecAsOriginalUser
事件函数的wpReady
页面中的NextButtonClick
函数调用脚本。
如果有人有兴趣,我会提供更多细节。
你的方法不正确。
有两种正确的方法:
- 如果安装程序仅为当前(非特权用户)安装应用程序,则不要求管理员权限,方法是将
PrivilegesRequired
设置为lowest
:[Setup] PrivilegesRequired=lowest
然后“用户”常量将正确引用当前用户的文件夹。 - 如果安装程序为所有用户安装应用程序,则将某些文件放入某个特定用户的文件夹中是没有意义的。所有用户都需要这些文件,而不仅仅是文件。在这种情况下,建议的方法是使用
{commonappdata}
constant(或类似文件)将文件安装到“Common”文件夹。并让应用程序在第一次运行时将文件复制到用户文件夹。 另见How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'。
您还可以允许用户在这两种方法之间进行选择。 见Make Inno Setup installer request privileges elevation only when needed。
对于其他类似的问题,请参阅
- Inno Setup Using {localappdata} for logged in user
- Inno Setup always installs into admin's AppData directory
话虽如此,你可以像你发现自己一样,使用copy
(或xcopy
部分中的robocopy
)执行外部复制实用程序(ExecAsOriginalUser
function,runasoriginaluser
flag,[Run]
)。
ExecAsOriginalUser(
'cmd.exe', '/c xcopy.exe "sourcefile" "%APPDATA%"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
有关此方法的更多详细信息,请参阅类似的问题Inno Setup Creating registry key for logged in user (not admin user)。
但是,如果安装程序立即开始升高(与提升本身相反),则上述操作无效。无论如何,它无法在这种情况下工作。见How to write to the user's My Documents directory with installer when the user used 'Run As Administrator'。因此,请坚持上述方法。
以上是关于通过Windows Vista / 7上的Inno Setup将文件安装到原始用户的My Docs文件夹的主要内容,如果未能解决你的问题,请参考以下文章
Windows Vista/7 上的 SDL_Mixer MIDI 音量问题
如果防火墙打开,Java 7 会阻止 Windows Vista 和 7 上的 FTP 传输。有任何想法吗?
Windows Vista/7:如何对输出音频混合进行采样?
带有 .NET 安装程序的 Windows Vista 上的文件安全性