web-dev-qa-db-ja.com

エラー:mscorlib.dllでタイプ「System.UnauthorizedAccessException」の未処理の例外が発生しました

これはクラッシュしてこのエラーが発生する部分です。ファイルを特定の場所にコピーしようとしたときです。

string startupDirectory = "C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
File.Copy(startupDirectory, "Startup.exe");

オンラインで読んで管理者権限を試し、「app.manifest」ファイルを作成しました。

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

設定でアプリマニフェストがこのファイルに設定されていることを確認しましたが、それでも同じエラーが発生します。

私もこのイベントを試しましたが、ファイルではなくディレクトリであるため、機能するとは思いませんでした。

File.SetAttributes(startupDirectory, FileAttributes.Normal);

これはWinFormsであり、私はWindows 7を使用していますが、Windows8以降でも使用したいと考えています。どうすればよいですか?

前もって感謝します!

6
Nullone

試してみてください

public static void Copy(string sourceFileName, string destFileName);

最初のオーバーロードはソースです2番目のオーバーロードは宛先です私は理由がこれかもしれないと思います

File.Copy("Startup.exe",startupDirectory);

ファイルの読み取り/保存元の.Netユーザーのアクセス許可を「フルコントロール」に設定してみてください。

IIS特定のファイルのサーバーでのアクセス拒否エラー)については、以下の手順に従ってください

1- Goto to C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup

2- Right click on your file -> Properties -> Pop Up of User properties appears -> click on Security tab-> click on Edit -> select Users-> tick on Allow Full Control -> Click Ok

これにより、アクセス拒否の問題が確実に解決されます

UnauthorizedAccessExceptionは、次の3つのいずれかを意味します。

  • 発信者には必要な権限がありません。
  • パスはディレクトリです。
  • パスで読み取り専用ファイルが指定されました。
2

この例外は、Windowsエラーによってトリガーされます。専用の「これはまったく意味がない」エラーコードはなく、「アクセス拒否」エラーコードを生成するだけです。どの.NETがUnauthorizedAccessExceptionに変換されますか。

ここでの「意味がない」問題は、ファイルコピーメソッドを使用してディレクトリをコピーしようとしていることです。ディレクトリはファイルではありません。ディレクトリをコピーするには、最初に新しいディレクトリを作成してから、ディレクトリ内のすべてのファイルをコピーする必要があります。 .NETにはそのためのメソッドがあり、ほとんどのC#プログラマーは、それが「間違った」名前空間であると考える傾向があります。 Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory()です。

ただし、この問題についてもう少し考える必要があります。もちろん、新しいディレクトリを「startup.exe」と呼ぶのは意味がありません。おそらくスタートアップディレクトリからspecificファイルをコピーすることを意図しているので、それが何であるかを推測することはできません。

3
Hans Passant

これを試して:

    File.Copy(startupDirectory, "Startup.exe", true);
    File.SetAttributes("Startup.exe", FileAttributes.Normal);
1
octavioccl

VisualStudioは管理者権限で実行できます。 (Windows7の場合、スタートメニューのVisual Studioアイコンを右クリックし、[管理者として実行]をクリックします)

1
Hassan.Siddiqui