2009-02-18 44 views
3

我工作的vb6應用程序出現Vista問題,原因很明顯(寫入程序文件以及默認不再允許的其他內容)。如何將VB6應用從XP升級到Vista?

  • 我應該在哪裏存儲應用程序數據或用戶保存的文件?
  • 我是否需要特權才能創建文件夾和文件?
  • 還有哪些其他常見操作會導致問題?
  • 程序有一個更新程序,它必須下載並註冊文件,如何在發生這種情況時提升權限?

其中一些問題有明顯的答案,但我想明確的東西是正確的。

+0

我想你會驚訝xp中的'默認情況下允許哪些用戶不是管理員。以標準用戶身份在xp中運行它,它可能不會在那裏工作。 – 2009-02-18 18:13:48

+0

確實如此,但它從來不是問題,因爲沒有人以標準用戶身份運行。不幸的是,程序假設用戶是管理員是非常普遍的,我很高興微軟終於在這個問題上採取了行動。 – 2009-02-18 18:35:38

回答

4

根據你在做什麼,你可能會處在一個痛苦的世界。對於這些問題中的任何一個都沒有硬性和快速的答案,但是從現在經歷同樣問題的人來看,這就是我所知道的。

1)我應該在哪裏存儲應用程序數據或用戶保存的文件?

這取決於你想要做什麼。如果你希望他們每個用戶,將它們存儲在用戶/應用程序數據,如果你希望他們爲所有用戶,將它們存儲在通用/ AppData的

If SHGetFolderPath(0, CSIDL_COMMON_APPDATA, -1, SHGFP_TYPE_CURRENT, sTempPath) = 0 Then 
     sCommonAppdata = Left$(sTempPath, InStr(1, sTempPath, Chr(0)) - 1) & "CompanyName\AppName" 
    End If 

改變,要CSIDL_APPDATA爲用戶AppData目錄。注意:這些映射到XP和Vista的文件系統上完全不同的地方,因此當您正在調試時,準備在不同的地方查看。

2)我是否需要特權才能創建文件夾和文件?

您需要Adminsitrator訪問才能在程序文件中寫入任何內容,如果可能的話不要這樣做!我們目前running into issues API的VB和標準API在Program Files中的文件行爲不同。

3)還有哪些其他常見操作會導致問題?

有很多隱藏的陷阱。僅舉幾例,您不能通過IPC或命名管道與其他應用程序進行通信(我們有一個服務,我們正在通過托盤通知圖標進行交談並且必須完全重寫)。你看到一個UAC通知是非常困難的。此外,如果沒有管理員,您不能在LOCAL_MACHINE的註冊表中寫入任何內容,因此您必須堅持LOCAL_USER或提升憑證(請參閱下文)。

4)該程序有一個更新程序,它必須下載和註冊文件,如何在發生這種情況時提升權限(sic)?

祝你好運,我強烈建議你不要在VB6中編寫它,就像我說的那樣,VB6文件api似乎可以訪問與標準API不同的文件。如果您需要提升權限,請參閱post,有人善意幫助我。

0

在短期內,可能根本沒有必要修改您的應用程序,因爲 Vista附帶了一組兼容性選項以允許傳統應用程序運行。這包括文件和註冊表虛擬化功能,該功能基本上將寫操作重定向到受保護的文件夾(如C:\ Program Files文件),以便只能在兼容模式下運行的特定應用程序可見的虛擬位置。

在這篇文章中提到了一些更多細節:How To Manage Windows Vista Application Compatibility在Dr. Dobb's。

+0

聽起來像兼容性應該是自動的,但我們正在接受關於兼容性問題的真正抱怨。從程序文件中的文件中讀取程序設置似乎會引發錯誤。 – 2009-02-18 18:23:50

0

Karl Peterson寫了一個nice article關於在哪裏存儲用戶數據&應用程序數據,VB6 class爲您檢索特殊路徑的位置。