ログイン ユーザー (ローカル管理者) として実行する Windows サービスがあります。起動時に、「一時クラスを生成できません (結果 = 1)」というメッセージが表示されます。そのため、windows/temp フォルダーに移動すると、UAC によって特権を昇格するように求められました。これを行った後、サービスは正常に起動します。では、Windows サービスの観点から、この UAC プロンプトをどのように処理すればよいでしょうか?
ありがとう!
ログイン ユーザー (ローカル管理者) として実行する Windows サービスがあります。起動時に、「一時クラスを生成できません (結果 = 1)」というメッセージが表示されます。そのため、windows/temp フォルダーに移動すると、UAC によって特権を昇格するように求められました。これを行った後、サービスは正常に起動します。では、Windows サービスの観点から、この UAC プロンプトをどのように処理すればよいでしょうか?
ありがとう!
元の質問について-症状を修正したイベント順序の特定の問題を超えて。
Local AdministratorsグループのメンバーであるユーザーがUACの下のマシンにログオンすると、2つのセキュリティトークンが付与されます。1つは制限付きの権限を持ち、もう1つはより高い権限セットを持ちます。デフォルトでは、高い方の権限がアクティブに指定されていない限り、低い方の権限が使用されます。指定する主な手段は、UIを使用することです。もう1つの方法は、アプリケーションマニフェストを使用することです。OSがこのアプリケーションをどのように処理するかを指定するXMLファイルです。マニフェストファイルは、実行可能ファイルと同じフォルダーに配置し、次の形式を使用して名前を付ける必要があります。「my_application_name.exe.manifest」
マニフェストのXMLは次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MY_APPLICATION_NAME" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
「UACマニフェスト」をグーグルで検索すると、より具体的な情報を見つけることができると確信しています...
これがお役に立てば幸いです...
質問に答える方法がまだわからないのに、問題は解決しました。基本的に、私のサービスはブートストラッププロセスから一時ディレクトリを継承していたので、現在のユーザーの一時ディレクトリを使用するように変更しました。あなたはこれらの線に沿って何かをする必要があるでしょう:
myProcess.StartInfo.EnvironmentVariables.Add( "TempPath"、 "C:\ Temp")
Windows サービスを LocalSystem として実行しないのはなぜですか?