1

編集:「マイ ドキュメント」の代わりに「ドキュメント」を使用すると、エラーが解消されます。また、絶対パスではなく、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();
    }

}

アクセス拒否エラー

これは Windows 7 Home Premium です。Visual C# 2010 Express でのデバッグ中にエラーが発生します。System32、AppData、および同じドライブの別のパーティションにあるさまざまなフォルダーなど、他のいくつかのフォルダーを開きました。さまざまな音楽ファイルを開き、さまざまなプログラムを実行できました。My Documents 以外はすべて正常に動作しているようです。Windows フォルダーには、個人用ファイルの既定の場所よりも大きな制限があると思います。それは実際には許可の問題ではないと思いますが、何が問題なのか推測することさえできません。エクスプローラーでマイ ドキュメントを開くことができます。ディレクトリとの間でファイルを移動できます。

これはとても単純なことのように思えます。Windows のしくみについて完全には理解していないことがたくさんあることは承知していますが、この状況や他のいくつかの状況から、私は Windows についてほとんど何も知らないのではないかと考えさせられます。このオペレーティング システムをよく理解するために調べることができる良い本や Web リソースは何ですか? おそらく、初心者の観点からファイル管理とシステム権限に焦点を当てていますか?

4

3 に答える 3

2

これらのハードコードされたパスは絶対に使用しないでください。
それを行う正しい方法は、このように Environment.GetFolderPath() と組み合わせた Environment.SpecialFolder 列挙型です。

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

他の「SpecialFolder」列挙型はここにあります

GetFolderPathを SpecialFolder 列挙型と一緒に使用することは非常に重要です。これは、さまざまなオペレーティング システム、オペレーティング システムのローカリゼーション、およびユーザーがこれらの場所の一部に対して行うことができる変更に対して正しく調整された場所を返すためです。

于 2012-04-24T21:54:58.537 に答える
1

Windows 7では、「マイドキュメント」は単に「ドキュメント」に名前が変更されました。ウィキペディアを参照してください。開こうとしているパスがOSに存在しません。

于 2012-04-24T21:52:42.610 に答える
1

コメント通り、

Windows 7 では、「マイ ドキュメント」は「ドキュメント」へのジャンクション リンクです。ジャンクションでプロセスを起動しようとすると、このエラーで失敗します。代わりに「c:\Users\Cheese\Documents」を起動してください。

または、これが現在のユーザーのドキュメント フォルダーである場合は、システムにそのパスを実際に問い合わせる必要があります。

var path=System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
于 2012-04-24T22:16:49.837 に答える