2014-09-27 50 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

相關問題