1

C ドライブにあるすべてのEXE ファイルのパスを取得しようとしています。管理者権限がないため、アクセスの問題に過ぎない問題に直面しています。

私はこのコードを書きましたが、システムはそれらのファイルへのアクセスを拒否しています。

DriveInfo drive = new DriveInfo(@"C:\\");
foreach (DirectoryInfo dir in drive.RootDirectory.GetDirectories(".*exe",SearchOption.AllDirectories))
{
     path.Add(dir.ToString());                                           
}

Windows でユーザーにアクセス許可を管理者に昇格させるように求めるにはどうすればよいですか (シールド/ダーク スクリーン メッセージ)。

4

3 に答える 3

0

管理者権限を持つアカウントを持っている場合は、偽装を使用してそのコード スニペットを実行できます。

実装のリンクはこちら

于 2013-09-14T18:41:30.850 に答える
0

これがあなたの質問に対する答えであるかどうかはmanifestわかりませんが、アクセス許可を抑制しているようです.アプリケーションが管理者アクセス許可で実行されるようにするには、新しい項目の追加メニューから新しいファイルを追加してください.app.manifestソリューション エクスプローラーで 名前が付けられた新しいファイルが表示されます。

完了したら、ソリューション エクスプローラーapp.manifestからダブルクリックして開きます。コード エディターで開いたら、そのセクションをこれに置き換えます。trustinfo

 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

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

            Specifying requestedExecutionLevel node will disable file and registry virtualization.
            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

私たちがしたことは、アプリケーションのマニフェストを変更して、実行中に管理者権限を取得できるようにしたことです。

これは、毎回管理者としてアプリケーションを実行する方法を説明するためのものでしたが、代わりに、アプリケーションに管理者権限があるかどうかのみを確認する必要がある場合は、この方法で確認できます。

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal appprincipal = (WindowsPrincipal) Thread.CurrentPrincipal;
if(appprincipal.IsInRole("Administrators"))//Check if the current user is admin.
{
  //Yeah,the app has adminstrative rights,do what you need.
}
else
{
  //Not running as administrator,react as needed.
  //Show error message.
}

アップデート

現在のアプリケーションのフル パスを取得するには、これを使用します。

string path=Application.ExecutablePath;

Application.ExecutablePath は、メソッドを呼び出している実行可能ファイルの絶対パスを返します。
: アプリケーションがメモ帳の場合、 C:\Windows\System32\Notepad.exeが返されます。

問題が解決することを願っています。

于 2013-09-14T18:02:22.033 に答える