2014-09-27 19 views
0

首次尝试发布此问题时有严重的时差。这个重新编辑的问题我只有相关的睡眠剥夺...Inno安装程序 - 如何用字符串替换UserName

我想知道使用安装程序捕获路径信息,然后删除任何对用户配置文件的任何参考的最佳方式。

我的程序旨在从中央网络位置运行。为了减少网络流量,一些文件被复制到本地驱动器,例如。应用程序数据\ 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}')); 

在安装过程中的本地驱动器位置被指定并存储在配置文件中。

我没有预测到的一个问题是,在安装程序时,配置文件中的路径是为单个用户(即执行安装的用户)定义的。在实际应用中的任何用户应该能够运行程序...

为了得到正确的路径对于任何给定用户,我的软件查找字符串“{用户名}”,并替换它:ENVIRON(用户名)

MyPath = Replace(MyPath, "{UserName}", Environ(UserName)) 

因此,例如,在安装程序中我需要更换:

C:\Users\My Name\My Program OR  C:\Users\My Admin\My Program 

的东西,如:

C:\Users\\{UserName}\My Program 

我alreay有这项工作在我的程序,但我不知道最好的方式让它在Inno工作...我的初始想法是写这样的配置文件:

StringChangeEx(MyPath,“My名称“,”{用户名}“,真)

想对此有一些观点,不知道如何让它适用于所有情况。

干杯,

回答

1

你这样做是错误的。

不要在配置文件中存储完整路径;仅存储指示用户希望将数据存储在通常的每个用户位置的值。 (或者不存储任何值,因为它应该是默认值)

然后在您的应用程序中,在您的应用程序的每次运行中,使用Shell API为当前用户提取当前AppData路径并添加你的应用程序独特的子文件夹。

请注意,对于用户的AppData路径不包含用户名并且甚至不在C:上,这是完全有效的。不要做假设;使用Shell API。这就是它的目的。

(究竟用哪一个,以及如何取决于目标的操作系统和您选择的编程语言,你没有指定调用。)

+0

Miral嗨 - 所以倒时差已经磨损了。 ..我想我很欣赏你在说什么(当然,欣赏评论,不知道我明白)。我允许用户在任何地方存储程序。该程序还可以将一些文件(图像和配置文件)复制到本地位置。在inno中,我让安装程序浏览到一个文件夹来安装这些文件。我还要求他们指定一个当地的位置......呃,我得到它......如果本地位置是myDocuments,那么保存它,而不是路径 - 正确。遵守我的名字。干杯, – SlowLearner 2014-10-20 22:17:14

+0

我会建议使用'CreateInputOptionPage'或类似的显示单选按钮的“保存在我的文档”,“保存在应用程序数据”,“保存在指定位置”等,其中只有最底层提供文件夹浏览器。 – Miral 2014-10-21 06:34:28

相关问题