2009-10-21 32 views
0

我有一個Windows窗體應用程序,它讀取並更新一個XML文件,其中包含Windows服務必須執行的信息。如何確保Windows應用程序和Windows服務在Win2008 x64上訪問相同的ProgramData?

這一直工作在Windows Server 2003,XP和Vista(X32)有一段時間了。

現在,當安裝在Windows Server 2008 x64上時,奇怪的事情已經開始發生,這要歸功於用戶「VirtualStore」文件夾重定向安全性安排(您可以告訴我還沒完全理解)。

Windows Forms應用程序想要創建,讀取和更新c:\ user \ username \ appdata \ local \ virtualstore \ programdata \ appname中的文件,但服務似乎很高興從c:\ program中的文件讀取數據文件\ APPNAME ...

結果是,他們正在尋找不同的數據。

現在,如果我同時設置可執行文件「以管理員身份運行」通過性能/兼容性選項卡上,這個問題就會消失,並在文件C:\ Program Files文件\作爲預期程序的名字。

然而,這種感覺不太理想。

正如你可能會說,我不是在這裏工作真正意識到大多數問題/因素。

這個問題可能是過於寬泛,對堆棧溢出回答很好,但能在正確的方向有人點或提醒我什麼,我需要了解,使我的應用程序可以在的Win2008 64位環境中正常工作,並繼續工作就像他們現在所做的那樣,在XP,Vista x32等上。

我的用戶羣根本不是技術性的,所以我不想強迫他們做技術性的「幕後」更改 - 如果可能的話,我想要安裝程序來處理它們。

回答

1

從你的問題看來你是存儲C數據:\ Program Files文件\ APPNAME

你不應該存儲在C的任何用戶或應用程序修改的數據:\ Program Files文件,它應該只包含靜態可執行文件並支持在安裝時編寫的文件。從一開始就將這些東西存儲在ProgramData中。

您應該從環境變量ALLUSERSPROFILE中獲得ProgramData的路徑(這也意味着它可以在XP上運行,它指向所有用戶)。或者,如果你想讓每個用戶的數據使用USERPROFILE來代替。

這一切都是由於安全性的變化,但目錄虛擬化,發生非常令人迷惑。特別是,例如,如果您以管理員身份安裝(所有操作都按預期進行),然後以普通用戶身份運行(在其他位置開始指向的位置)。

+0

當然,如果您進行此更改,它很可能會影響XP上的現有安裝,但安裝程序可以處理該遷移。 – hplbsh 2009-10-21 22:35:16

相關問題