2011-03-15 560 views
2

我們終於開始將軟件的文檔從程序自己的目錄中移出到「我的文檔」中。我們還在清單中添加了「requestedPrivileges」行,以防止虛擬化帶來進一步的麻煩。禁用UAC虛擬化後恢復文件

但是,如果我們只這樣做了,那麼在Vista/7中運行舊版本的任何人在更新後可能會在隱藏的VirtualStore目錄中的某處丟失其工作。那麼遷入21世紀的首選方式是什麼?

坦率地說,我對複製文件有點謹慎,特別是因爲我似乎無法找到在影子目錄中獲得的程序化方式,但大概其他許多人必須在我們面前遇到同樣的問題。

回答

2

除非您合法需要管理權限才能使您的程序正常工作,否則請不要添加requestedPrivileges - 您的描述中沒有任何內容表明您已這樣做。 應該也可以讓你簡單地複製第一次啓動時的文件,就好像它們仍然在你的程序目錄中一樣,因爲任何虛擬化仍然有效。

但是,如果您絕對必須在未啓用UAC的情況下執行遷移,則可以在%LOCALAPPDATA%\VirtualStore\path\to\file中找到您的文件。例如,如果您的文件已存儲在C:\ Program Files \ OurApp \中,您可以在%LOCALAPPDATA%\VirtualStore\Program Files\OurApp\中找到它。

要獲得到%LOCALAPPDATA%的路徑,可以使用SHGetSpecialFolderPathCSIDL_LOCAL_APPDATA作爲CSIDL參數。

+0

不,我們不需要任何額外的特權,所以我們使用asInvoked級別。這只是我們在虛擬化方面遇到了一些問題(例如用戶通過資源管理器備份舊數據),並希望在將來避免它們。這就是我們爲什麼要改變事物的原因。 我想一個存根可執行文件做複製也應該做的伎倆,儘管如此。 – doynax 2011-03-15 16:09:43

+0

@doynax:通過需要更多權限,您只會激怒離開UAC的用戶,並且現在不得不接受在他們啓動程序時爲您的程序提供管理權限 - 這只是在機器上擔任管理員角色的用戶;對於通常在有限帳戶下運行的用戶,他們每次都必須輸入管理員密碼。充其量,增加特權將是一種解決方法,而不是修復;要解決這個問題,你必須移動所有的東西,一旦你這樣做了,你就不需要這些權限。 – 2011-03-15 16:21:48

+0

我正在請求「asInvoked」級別,根據MSDN標準,這是正確的方式,表示您的應用程序支持Vista(並因此關閉虛擬化),而不需要任何額外的權限。 – doynax 2011-03-15 16:52:39