これがあなたの質問に対する答えであるかどうかは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が返されます。
問題が解決することを願っています。