第一次尝试发布这个问题时遇到了严重的时差问题。这个问题的重新编辑我只有相关的睡眠剥夺......
我想知道使用安装程序捕获路径信息然后删除对用户配置文件的任何引用的最佳方法。
我的程序旨在从中央网络位置运行。为了减少网络流量,一些文件被复制到本地驱动器,例如。 AppData \ MyProg \
我使用文件浏览对话框,因此安装人员可以指定位置:
pg_LocalPaths := CreateInputDirPage(pg_CentralPaths.id,
'Confirm File Locations For User Settings', 'To improve user experience these locations should be off the network.',
'Default Locations are:', False, 'New Folder');
// Add file browswer item (with an empty caption)
pg_LocalPaths.Add('Supporting files will be copied here by the application:');
pg_LocalPaths.Add('User settings (for a single user) will be saved here:');
// Set initial value
pg_LocalPaths.Values[0] := GetPreviousData('pg_LocalPaths0', ExpandConstant('{userappdata}\{#pFolder}'));
pg_LocalPaths.Values[1] := GetPreviousData('pg_LocalPaths1', ExpandConstant('{userappdata}\{#pFolder}'));
在安装期间,指定本地驱动器位置并将其存储在配置文件中。
我无法预测的一个问题是,在安装程序时,配置文件中的路径是为单个用户定义的,即执行安装的用户。在实践中,任何用户都应该能够运行该程序......
要为任何给定用户获取正确的路径,我的软件会查找字符串“{UserName}”并将其替换为:Environ(UserName)
MyPath = Replace(MyPath, "{UserName}", Environ(UserName))
因此,例如,在安装程序中我需要替换:
C:\Users\My Name\My Program OR C:\Users\My Admin\My Program
有类似的东西:
C:\Users\\{UserName}\My Program
我确实在My Program中使用了这个,但是我不确定在Inno中使用它的最佳方法......我的想法就是编写这样的配置文件:
StringChangeEx(MyPath,“我的名字”,“{用户名}”,真)
想要对此有所了解,不确定如何让它适用于所有情况。
干杯,
答案 0 :(得分:1)
你做错了。
不要在配置文件中存储完整路径;仅存储指示用户希望将数据存储在通常的每用户位置的值。 (或者不要存储任何值,因为这应该是默认值。)
然后在您的应用程序中,在每次运行应用程序时,使用Shell API获取当前用户的当前AppData路径,并将应用程序的唯一子文件夹附加到此。
请注意,用户的AppData路径不包含其用户名完全有效,甚至不在C:。不要做出假设;使用Shell API。这就是它的用途。
(具体使用哪一个以及如何调用它取决于您没有指定的目标操作系统和您选择的编程语言。)