2012-04-24 87 views
0

編輯:使用「文檔」而不是「我的文檔」擺脫了錯誤。我也被推薦使用Windows特殊文件夾而不是絕對路徑。什麼可能導致此訪問被拒絕錯誤?

我正在嘗試用我正在編寫的應用程序替換桌面上的所有快捷方式,該應用程序將具有其自己的快捷方式版本。我計劃爲新的快捷方式提供一些與舊的快捷方式相同的功能。在做其他事情之前,我想通過打開快捷方式指向的文件或文件夾會很重要。下面是代碼樣片:

public partial class Form1 : Form 
{ 
    Process p1, p2, p3, p4; 

    public Form1() 
    { 
     InitializeComponent(); 
     p1 = new Process(); 
     p2 = new Process(); 
     p3 = new Process(); 
     p4 = new Process(); 

     p1.StartInfo.FileName = "cmd"; 
     p2.StartInfo.FileName = "c:\\Users\\Cheese\\My Documents"; 
     p3.StartInfo.FileName = "c:\\Users\\Cheese\\AppData"; 
     p4.StartInfo.FileName = "c:\\Program Files (x86)"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     p1.Start(); 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 
     p2.Start(); 
    } 
    private void button3_Click(object sender, EventArgs e) 
    { 
     p3.Start(); 
    } 
    private void button4_Click(object sender, EventArgs e) 
    { 
     p4.Start(); 
    } 

} 

Access Denied error

這是Windows 7的家庭高級版。在Visual C#2010 Express中進行調試時出現錯誤。我在同一個驅動器上打開了其他幾個文件夾,如System32,AppData和另一個分區上的各種文件夾。我能夠打開各種音樂文件並運行不同的程序。除了我的文檔,一切似乎都正常。我認爲Windows文件夾會比個人文件的默認位置有更大的限制。我想這不是一個真正的權限問題,但我甚至無法猜測可能是什麼問題。我可以用瀏覽器打開我的文檔。我可以將文件移入和移出目錄。

這似乎是這樣一個簡單的事情。我知道有很多我並不完全瞭解Windows的工作方式,但是這種情況和其他一些情況讓我覺得我可能對Windows沒有太多瞭解。爲了更好地掌握這個操作系統,我可以研究哪些好書或網絡資源?從新手的角度來看,可能重點關注文件管理和系統權限?

+0

在Windows 7下「我的文檔」是「文檔」的連接點,它可能是連接處的啓動問題。啓動「c:\\用戶\\奶酪\\文檔」時是否出現同樣的錯誤? – 2012-04-24 21:51:08

+0

您是否試圖在用戶檔案中找到該文件夾​​? – Steve 2012-04-24 21:52:13

+0

解決方案的簡單程度幾乎可憐。使用「文檔」而不是「我的文檔」的作品。 – Cheese 2012-04-24 21:55:08

回答

1

至於評論,

在Windows 7下「我的文檔」是結到「文檔」,試圖發動對結的過程將失敗,此錯誤。改爲啓動「c:\ Users \ Cheese \ Documents」。

或者,如果這是當前用戶我的文檔文件夾,你應該真的問系統的路徑。

var path=System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments); 
1

隨着Windows 7「我的文檔」已被重命名爲「文檔」。見Wikipedia。 您嘗試打開的路徑在您的操作系統中不存在。

+0

它在技術上是存在的,它只是它的一個連接點,當你試圖將它作爲一個進程啓動時它就會失敗。 – 2012-04-24 22:17:31

+0

我不這麼認爲。至少dir不會顯示像這樣的東西。並且聯結sysinternals命令在那裏也找不到任何聯結。但是,如果您在My Documents下方導航並右鍵單擊My Documents內的文件,您將看到該路徑確實是.. \ Documents \ ... Windows 7不創建My Documents連接,但Explorer本身顯示已翻譯的文件夾用戶名稱。在我的德國機器上,它被稱爲「Eigene Dokumente」,當然在那裏沒有這樣的文件夾。 – 2012-04-24 22:34:38

+0

http://en.wikipedia.org/wiki/Special_folder - 此鏈接顯示%USERPROFILE%\ Documents文件的「我的文檔」特殊文件夾的位置。然後在底部有一個表格,顯示虛擬文件夾。 「我的文檔」也作爲虛擬文件夾存在。 **「用戶的My Documents文件夾的虛擬文件夾;用作桌面虛擬文件夾的子項」**我對特殊文件夾和虛擬文件夾有什麼樣的想法,但我不太瞭解「我的文檔」 。 – Cheese 2012-04-24 22:48:33

2

你不應該使用這些硬編碼路徑。
去與正確的做法是)加上Environment.GetFolderPath(在Environment.SpecialFolder枚舉這樣

string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

其他「SpecialFolder」枚舉可以found here

使用這是非常重要的GetFolderPath與SpecialFolder枚舉一起使用,因爲它返回爲不同操作系統正確調整的位置,操作系統的本地化以及用戶可以在這些位置上執行的更改。

+0

謝謝,我會研究一下。 – Cheese 2012-04-24 22:01:27

+0

在我上面的代碼中,這是(特殊文件夾)「cmd」能夠在沒有指定任何路徑的情況下啓動的原因嗎?我甚至沒有文件名中的擴展名。 – Cheese 2012-04-24 22:09:05

+1

cmd.exe是命令解釋程序,位於系統PATH環境變量中包含的文件夾中。因此,操作系統檢查PATH中的每個文件夾,以搜索以CMD開頭的程序(bat,cmd,com或exe)。如果您嘗試使用「記事本」,這將是相同的。 – Steve 2012-04-24 22:13:29