2010-12-19 23 views
3

我維護一個將其數據(訪問文件)存儲在應用程序文件夾的子文件夾中的VB6應用程序。因此,當用戶將應用程序安裝到默認位置C:\Program Files\MyApp時,數據將在虛擬存儲區中結束。我現在已經被賦予了將1000個左右的App.Path語句轉換爲不存在任何安全問題的Data文件夾的路徑。有人可以幫我指出一些資源,將spoonfeed我如何處理Users\< Username>\AppData\Local\文件夾中的數據?
我應該使用本地的AppData文件夾,還是可以讓用戶選擇合適的位置?將VB6的數據文件夾移出程序文件

+2

差不多的副本[這個問題](http://stackoverflow.com/questions/4273424/where-should-i-store-application-specific-settings) 。在Bob Riemersma和Cody的幫助下查看[接受的答案](http://stackoverflow.com/questions/4273424/where-should-i-store-application-specific-settings/4275821#4275821)灰色 – MarkJ 2010-12-20 09:53:54

+0

我經歷了這個確切的問題。你有我的同情心。請注意,App.Path不一致,因爲它爲根返回'C:\',但省略了其他目錄的最後一個'\'。我們爲它創建了一個shell函數。這很可能永遠不會成爲一個問題,但很好意識到這些問題。 – jakdep 2010-12-20 11:05:38

+0

@MarkJ:這個問題確實與其他人的精確重複是如此雄辯和優雅地回答。我會投票結束這一個。 – Dabblernl 2010-12-20 15:38:33

回答

1

我會使用本地應用程序數據文件夾:如果我們假設一對夫婦的事情

Dim sAppData As String 

sAppData = Environ("USERPROFILE") & "\AppData" 
2

好:

  • 這僅適用於Vista或更高版本的問題。
  • 您的數據是在子文件夾,在App.Path下。

...我有一種解決方法可以使用。

請注意,我只使用這個技巧,當我有一堆舊的VB6程序被寫入使用App.Path下的文件夾中的數據,這種快速而骯髒的黑客攻擊可以讓很多程序快速運行。我幾乎總是添加或更新應用程序清單,主要是爲了防止虛擬化。


我所做的更改:

  • 添加一些代碼爲Sub Main(插入副主如果程序不已經有一個)。
  • 將兩個Class模塊(由新的Sub Main代碼調用)添加到項目中。

當新的計劃部署,在Vista或更高版本的程序必須運行一次以管理員身份。在我的加載項代碼的最新版本中,如果需要,程序將提示用戶重新運行它,並在確定後自動終止。

第一次運行時一切都應該是沒說的後,運行就像對的Win2K,XP等


下,需要提升提供所需的App.Path子文件夾列表此啓動代碼到PathLinks類。

Pathlinks在Public專用文件夾下創建一個程序文件夾,然後爲其下的數據創建匹配的子文件夾。接下來,它將這些App.Path子文件夾中的任何文件和子文件夾移動到新的位置。最後它創建符號鏈接到App.Path下的新文件夾。

如果在Vista之前的Windows下運行,PathLinks僅創建任何尚未存在(即安裝)的App.Path子文件夾列表(在App.Path下)。

從這裏開始,程序會在新位置找到這些文件,根本不需要修改它對App.Path的使用。


兩個加載項類之一是整型,你可以刪除它。它只是讓啓動代碼調用TaskDialog而不是使用MsgBox調用。

一定要向下滾動用於張貼在PathLinks - Tame App.Path Under Vista+

注意,示例項目跳過運行應用程序時,它說:「第一次提升」絕招最新版本。它只是在重新定位數據和符號鏈接之後在Sub Main中執行Exit Sub。

+1

請注意,您可以使用代碼,而不是將其添加到應用程序中,您可以創建一個小的安裝後幫助程序。對於PDW安裝,您甚至可以創建自定義的Setup1.exe,最後執行這些步驟,或者編寫幫助程序以運行重命名的Setup1(稱爲Setup2)將幫助程序Setup1命名爲引導程序,以運行幫助程序,該程序運行重命名的「Setup2」等待完成,刪除Setup2,然後移動數據並創建符號鏈接。 – Bob77 2010-12-21 23:51:53

+0

謝謝你,但我會去除所有App.Path引用的漫長而痛苦的方式。 – Dabblernl 2010-12-27 09:42:09

相關問題