2012-11-12 158 views
4

我有一個應用程序,我使用Windows 7上的Visual Studio 2010中的安裝程序進行部署。程序部署並運行可以在Windows 7和XP上運行,但是當我在Windows 8系統上部署它時,會遇到有關訪問配置文件的錯誤。加載配置文件時發生錯誤:訪問路徑c: Program Files(x86) ... denied

該程序安裝在c:\ Program Files文件(x86)[公司名稱] [應用程序名稱] \中,並且被引用的文件是一個臨時文件,其名稱與Windows GetTempFile生成的機器相似, x4q0toqw.tmp。它不存在於此文件夾中,然後有一個對exe配置文件(myapp.exe.config,它確實存在)的引用

如果我在Windows 8系統上構建並運行代碼,它會安裝並運行良好,我沒有得到這個錯誤,但是如果我在Windows 7上部署Window 8編譯的應用程序,我會得到與訪問配置文件相同的錯誤。這兩臺機器都是64位的,但生成一個32位應用程序。

我不打算髮布兩個二進制文件。誰能告訴我發生了什麼事?我正在嘗試設置JIT調試,以便在拋出異常時可以附加到exe,因爲本機調試並不能幫助我,因爲我沒有得到例外。

感謝,

加里

這是兩個不同的機器,但我登錄到同一域中兩個相同的用戶,並且是一名管理員。

+0

同一臺機器?兩個會話的管理權限? – Brad

+0

您何時在安裝過程中或應用程序運行時出現錯誤?安裝程序是您自己編寫的,還是商業產品? –

+0

當應用程序加載時,我在form_load調用中得到第一個錯誤,這是我加載應用程序的所有配置設置的地方。由於沒有運作,沒有任何工作。設置非常簡單,我編寫它,它只是將應用程序放在程序文件文件夾,桌面上的快捷方式等。 – Gary

回答

3

也許你的應用程序在加載過程中重寫你的應用程序配置,這將導致系統質疑訪問授權......如果是這樣,可能是你可以改變你的應用程序(安裝的)的屬性讓管理員權利......這將使您的應用程序自動有權編程編輯應用程序配置。

或...您可以忘記應用程序配置重寫並將所有內容放在默認應用程序配置腳本中。但這會暴露您的應用程序數據庫安全...

+2

請勿在您的帖子中使用簽名或標語。閱讀http://stackoverflow.com/faq#signatures – Anand

0

我有同樣的錯誤。這是因爲臨時文件在C:\Program Files (x86)\[Company Name]\[App Name]文件夾中創建,並且普通用戶(PC名稱\用戶)沒有修改此文件夾的權限。只要我添加修改權限,它就開始正常工作。

+1

您不應該授予Program Files文件夾內的修改權限。將文件放在適當的位置,例如ProgramData或(更好的是)用戶的應用程序數據文件夾。 –

+0

在我將當前應用程序域的配置文件位置設置爲保存在AppDataFolder中的app.config位置後,它可以正常工作。 AppDomain.CurrentDomain.SetData(「APP_CONFIG_FILE」,Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+「\\ app.config」); –

0

我在Win 7上通過提升我的服務所運行的帳戶權限解決了Visual Studio 2010中非常類似的問題。請參閱步驟9 here

設置Account屬性LocalSystem.

當我serviceProcessInstaller1LocalService帳戶跑我得到了一個錯誤,如你的。但將帳戶更改爲LocalSystem解決了此問題。我安裝的服務然後能夠寫入其C:\Program Files (x86)\[Company Name]\[App Name]\[App Name].exe.Config文件。即使在運行服務的安裝程序時檢查了Just me複選框的安裝。

請記住言論here雖然:

LocalSystem值定義一個高特權帳戶,但大多數 服務並不需要這樣一個提升的權限級別。

+0

是的,所以這是一個非常糟糕的解決方案。問題在於你不應該首先寫入Program Files目錄中的文件。安裝您的服務以具有管理權限的用戶身份繞過安全性是一個壞建議。 – CodeCaster

+0

嗯,該服務只寫入其自己的配置文件。 – snark

+0

是的,這就是你打算做的事情。這是一種服務,可能帶有某種IPC機制,通過一個錯誤可能用於訪問機器上任意位置的文件,並通過管理權限訪問常規用戶不應該訪問的許多其他內容。當您只需將配置文件存儲在運行服務的用戶的AppData文件夾中時,就不需要引入這樣的攻擊界面。 – CodeCaster

相關問題