2009-06-14 89 views
2

我在c#中編寫了一個程序,用於Windows7,效果很好...... 但是現在我開始構建一個將程序文件複製到「C:\ Program Files」的設置。c#win7:unauthorizedaccessexception

現在有很多問題,當程序是該文件夾中:

1)如果我取消一個OpenFileDialog我會得到一個異常

2)我的程序不將文件寫入AppData文件夾了

3)程序在自己的目錄無法打開,因爲許可實習生文件

我不知道我能做些什麼......

有人可以幫助我嗎?

編輯:

也許你不明白我的問題。

我寫了一個在C:\ myprogram中正常工作的程序。 我提出,將文件複製到C的安裝程序:\ Program Files目錄,這是同樣的,當我在我的文件複製到該目錄

  • 我的程序只打開文件在其自己的目錄
  • 我的程序打開,並在應用程序數據文件夾
  • 我的程序可以打開文件,就像在RTB .TXT寫道文件。將使用OpenFileDialog

這3點不起作用!

如果我的程序位於Program Files文件夾中,它無法打開像C:\ Program Files \ myprogram \ xsl \ test.xsl這樣的文件,並且無法將文件寫入AppData文件夾。

如果我將我的程序安裝到C:\ lalala,它將工作!

回答

5

好了 - 我找到了答案:

我必須使用的

FileStream fs = File.OpenRead(tmpfile) 

代替

FileStream fs = new FileStream(tmpfile, FileMode.Open); 
1

要將文件複製到Program Files或任何特權位置,該進程必須由高級管理員運行。由於您正在討論「複製」文件和「OpenFileDialog」,這聽起來像您正在運行.NET進程來執行復制,而不是Windows安裝程序。通常,這應該由安裝程序而不是您的應用程序完成。您的應用程序需要在其清單中設置requireAdministrator,或者僅針對該特定操作升級。欲瞭解更多信息,你應該閱讀UAC。首先,我建議您在CodePlex上閱讀UAC: The Definitive Guide

1

你真的應該使用Windows安裝程序。它負責處理與instasllation相關的問題,並確保其特權級別被提升以完成必要的工作。

如果你沒有適當地提升UAC,可以在幕後做很多事情,這可以完全改變你的程序看到文件系統的方式。

此外,當您打開程序目錄中的文件時,只能以只讀模式打開這些文件,否則您將獲得文件異常。

1

或者,如果這上面的解決方案無效(「系統。 IO.FileStream'不包含帶1個參數的構造函數),那麼試試這個:

FileStream file = new FileStream(fileName,FileMode.Open,FileAccess.Read);

相關問題