0

ログイン ユーザー (ローカル管理者) として実行する Windows サービスがあります。起動時に、「一時クラスを生成できません (結果 = 1)」というメッセージが表示されます。そのため、windows/temp フォルダーに移動すると、UAC によって特権を昇格するように求められました。これを行った後、サービスは正常に起動します。では、Windows サービスの観点から、この UAC プロンプトをどのように処理すればよいでしょうか?

ありがとう!

4

3 に答える 3

3

元の質問について-症状を修正したイベント順序の特定の問題を超えて。

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マニフェスト」をグーグルで検索すると、より具体的な情報を見つけることができると確信しています...

これがお役に立てば幸いです...

于 2009-08-29T23:39:47.647 に答える
0

質問に答える方法がまだわからないのに、問題は解決しました。基本的に、私のサービスはブートストラッププロセスから一時ディレクトリを継承していたので、現在のユーザーの一時ディレクトリを使用するように変更しました。あなたはこれらの線に沿って何かをする必要があるでしょう:

myProcess.StartInfo.EnvironmentVariables.Add( "TempPath"、 "C:\ Temp")

于 2009-01-31T00:43:56.030 に答える
0

Windows サービスを LocalSystem として実行しないのはなぜですか?

于 2009-02-04T19:27:33.967 に答える