-1

特権を設定Taskするにはどうすればよいですか?Thread

Task Scheduler Managed Wrapperを使用していて、別のスレッド (明らかに権限が低い) でそれを呼び出すと、例外が発生するため、質問します。

私はこのSOの質問を見ましたが、それをうまく使うことができませんでした ( Thread.CurrentPrincipal.Identity as WindowsIdentityis null)

編集:

これは私がスレッドを開始する方法です:

await Task.Factory.StartNew(() => {
    /*...*/
}, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);

編集2:

例外の詳細は次のとおりです。

COMException: Interface not registered (Exception from HRESULT: 0x80040155)

    at Microsoft.Win32.TaskScheduler.V2Interop.IRegisteredTask.get_Definition()
    at Microsoft.Win32.TaskScheduler.Task.get_Definition()
    at TCM.TaskShedulerStartUp.Update() in c:\...\TaskShedulerStartUp.cs:line 61
4

1 に答える 1

3

この COM エラー コードは、スレッド権限とは関係ありません。リンクされた記事は、それについてはまったく間違っています。インターフェイスはHKLM\Software\Classes\Interfaceレジストリ キーに登録されます。COM は、あるスレッドから別のスレッドへの呼び出しをマーシャリングする必要があるときにそこを調べます。どのプロキシが関数の引数値をコピーしようとしているのかを知る必要があります。これは確かにあなたのプログラムで非常にありそうなシナリオです。私たちが知っている唯一のことは、あなたスレッドを開始したということです。

マシンのレジストリに問題があるようです。または、COM サーバーが正しく登録されていません。または、COM サーバーがスレッドからの使用をサポートしていないだけです。または、プログラムが 64 ビット バージョンの Windows 上の 32 ビット プロセスであり、インターフェイス キーが Wow6432Node に存在しません。または、サーバーが正しく登録されておらず、キーが HKCU のみに書き込まれ、HKLM には書き込まれていません。これは、コードの実行に使用されたユーザー アカウントと関係があります。

あなたの質問には、あなたがそれを絞り込むのに役立つものは何もありません. タスク スケジューラに問題があるというのは遠距離の説明です。レジストリ キーを失うことは、マシンにとってかなり重大な問題になります。

SysInternals の ProcMon ユーティリティを実行して、この問題の診断を開始します。Interfaceプログラムがキーインを検索し、見つけられないことがわかります。詳細なヘルプを得るには、完全なキー名で質問を更新してください。

于 2013-08-04T13:30:20.787 に答える