ソフトウェアをWindows Vistaで管理者として実行できるようにする必要があります(誰かが管理者権限なしで実行すると、クラッシュします)。
他のソフトウェアを起動するときに、「このソフトウェアは管理者として実行されます。続行しますか?」などのプロンプトが表示されました。アプリが管理者権限を取得しようとしたとき。
Windows Vistaでc#アプリを実行するときに管理者権限を要求するにはどうすればよいですか?
次をマニフェストファイルに追加します。
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
レベルにhighestAvailable
を使用することもできます。
マニフェストファイルの埋め込みについてはこちらをご覧ください。
http://msdn.Microsoft.com/en-us/library/bb756929.aspx
PS:マニフェストファイルがない場合、簡単にマニフェストファイルを追加できます。
Visual Studioで、プロジェクト->アイテムの追加->アプリケーションマニフェストファイルの選択(Visual C#アイテムの[全般]の下)を右クリックします。
追加したファイルには既に上記の部分があります。レベルをrequireAdministrator
からasInvoker
に変更するだけです
このXMLをyourexename.exe.manifestというファイルに入れます。
<Assembly xmlns="urn:schemas-Microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-Microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" />
</requestedPrivileges>
</security>
</trustInfo>
</Assembly>
マニフェストでrequestedExecutionLevel
トークンを使用する必要があります。
F#Visual Studio 2013では、次のようにFSharpコンパイラの/win32manifest
フラグを使用して管理者の昇格を要求するマニフェストファイルが含まれていました。したがって、「App.Exe」という名前のプロジェクト出力が与えられた場合
次の内容のファイルを作成します(便宜上、プロジェクトにファイルを追加できます。Build Action
がNone' and
Output to Copy ...is
Do not copy. By convention such a file is named
であることを確認してください。 App.Exe.manifest`。uiAccess(ユーザーインターフェイス)が必要な場合は、アセンブリに厳密な名前を付ける必要があります。
<?xml version="1.0" encoding="utf-8" ?>
<asmv1:Assembly manifestVersion="1.0"
xmlns="urn:schemas-Microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-Microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-Microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="App" />
<trustInfo xmlns="urn:schemas-Microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-Microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:Assembly>
プロジェクトダイアログビルドパネルのOther flags:
入力フィールドを編集して、次を含めます:/win32manifest:<ApplicationManifestFile>
。たとえば、この場合、/win32manifest:App.Exe.manifest
。