2010-09-05 237 views
0

當我們爲我們的.NET應用程序用於SetUp &部署項目,才能被安裝我們的應用程序被設置爲C:\Program Files..... 我們的應用程序完美運行,如果我們使用的是默認的文件夾Windows XP機器。但是,如果我們使用的是Windows Vista或Windows 7計算機,應用程序不會完美運行,特別是如果我們在我們的應用程序中執行任何文件操作...Windows 7兼容性問題

任何人都可以找到這個問題的解決方案?是否有任何方法可以穿透Windows 7的用戶帳戶控制和文件訪問控制?或者任意1可以選擇將默認安裝文件夾從[ProgramFilesFolder]\[Manufacturer]\[ProductName]更改爲其他文件夾?

+0

您沒有在您的問題中提供足夠的信息。主要 - 你的意思是「不能完美運行」?什麼是問題?例外?錯誤? – Oded 2010-09-05 06:40:46

+0

應用程序將運行..我的應用程序包括許多文件操作,例如,許可,而我添加許可證文件2我的應用程序,它發生2是一個問題。如果在[ProgramFilesFolder] [Manufacturer] [ProductName]中安裝我的應用程序,簡而言之,文件操作無法執行。但是,如果將它安裝在另一個目錄中,例如「C:\ Myapp \ New \」,那麼它不成問題。 – 2010-09-05 06:49:20

+0

您能否編輯您的問題並直接添加相關詳細信息而不是將它們添加爲註釋? – Oded 2010-09-05 06:51:27

回答

3

如果你的應用程序寫入其安裝文件夾下的所有文件(即Program Files如果使用默認路徑下),那麼它寫的不好。您不應該嘗試繞過操作系統安全機制來保護用戶免遭嚴重寫入的應用程序的侵害;你應該修復你的應用程序,使其正常工作。

這當然不是.NET的問題。任何執行同樣任務的應用程序,無論使用哪種語言/框架,都會遇到同樣的問題。

+0

當我們開發這樣的應用程序時,你能否給出一個解決方案來修復這個錯誤? – 2010-09-05 06:50:57

+0

我的意思是,我希望2do文件操作與我的應用程序,但它不是必需的,我的應用程序應該安裝在「C:\ Program Files文件」 – 2010-09-05 06:52:09

+0

您可以「做文件操作」,只是受到限制。具體來說,你可以在應用程序文件夾中讀取任何東西。不過,你不能在那裏寫。您可以在其他地方(例如,當前正在運行您的應用程序的用戶的「我的文檔」)進行書寫。 – 2010-09-05 08:15:11

1

您仍然應該在Program Files文件夾中安裝您的應用程序。有充足的理由在那裏 - 所有用戶的單一副本,在衆所周知的鎖定的地方,除了管理員以外,沒有人可以篡改你的二進制文件。

但是,你正在做的任何文件操作應該是在用戶可寫文件的標準Windows的地點之一。有幾個這樣的文件夾,這取決於文件使用模式。您可以在下面的做題閱讀更多有關這些:所有用戶共享

My winform app uses xml files to store data, where should I store them so Vista users can write to them?
Vista and ProgramData

1

數據在C共:\ ProgramData(使用Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)找出它實際上生活 - 它可以在Windows版本中不同)。

特定於用戶

數據應該在SpecialFolder.ApplicationData。如果用戶具有漫遊配置文件,則在機器之間共享。

特定於用戶

數據也是特定的機器應該是SpecialFolder.LocalApplicationData

如果你真的需要把東西在你的程序的安裝目錄,則需要使用管理員權限才能做到這一點。

您應該通過在程序第一次運行時提示提升來做到這一點。最好,你應該在安裝過程中這樣做(因爲你已經提升了)。

1

首先,你不應該設置你的應用程序下C到安裝:\ Program Files文件\ ...,則應該將其設置爲%PROGRAMFILES%\ ...雖然這些通常等同於同樣的事情,它們可以在64位系統上有所不同,或者如果系統已經這樣設置,它們可能會非常不同。

正如已經提到過的,不要試圖繞過UAC,這是出於某種原因出現的,您的程序並不比系統上的任何其他程序更特別。相反,你應該做的就是設置你的應用程序清單,以便在啓動時獲得管理級別權限(如果繞過文件系統虛擬化,儘管用戶可以拒絕它,甚至可能甚至沒有以管理員身份啓動某些內容的權限)。您可以做的另一件事是在您的應用程序所在的文件夾中設置ACL,並讓機器上的所有用戶都可以讀取/寫入該文件夾(這必須在安裝時完成)。

或者,您可以按照正確的方式執行操作,並將數據文件存儲在您有權訪問的%APPDATA%文件夾中,儘管這些文件夾特定於系統的每個用戶。