13

簡単な例があります。アプリ A には、ローカル管理者であるユーザー X へのハードコードされた資格情報があり、ハードコードされた絶対パスを使用してそれらの資格情報でアプリ B を起動します。A と B の両方と dotnet コンソール アプリケーションですが、コンソールとは対話せず、情報をファイルに書き出すだけです。

A を対話的に (Creds の下で、ダブルクリックして、または CMD.exe を介して、または対話型の PowerShell セッションで) 実行すると、正常に実行されます。正常に B を呼び出す

Aがcredsの下にあるスケジュールされたタスクを実行し、ユーザーXでBを呼び出すと、Process.Start(mystartinfo)のエラーコードは-1073741502または16進数で0xC0000142であり、「アプリケーションは正しく初期化できませんでした」を意味します

ただし、ユーザー X 資格情報を使用して A を呼び出すスケジュールされたタスクを実行すると、機能します。

この小さなテストを行った主な理由は、スケジュールされたタスクまたはリモート処理から PowerShell で "start-job -Credential" を実行しようとしたとき、または PowerShell 内から PowerShell または System.Diagnostic>Process.Start で start-process を呼び出したときに同様の動作が見られるためです。同じシナリオで。最初は PowerShell のバグだと思っていましたが、もっと深いようです。

4

3 に答える 3

1

Windows Server 2008R2 で発生するこのような動作に遭遇しました。私の C# アプリケーション (A) は、プロセス B を開始します。

プロセス B は、Windows デスクトップにアクセスしないと実行に失敗します。[Windows API CreateWindow(); の呼び出しに失敗します。] サービスとして (またはスケジューラーによって) 実行されると実行が妨げられます (これは、「at /interactive cmd.exe」を使用したよく知られたユーザー権限のエスカレーションを防ぐためです)。

お使いの環境を確認して、同じ問題かどうかを確認することをお勧めします。その場合は、CreateWindow() API 呼び出しへの参照を削除する方法を検索するか、正しく処理する必要があります。

残念ながら、私はプロセス B にアクセスできなかったため、この問題を解決できませんでした。最終的に、Server 2003 マシンにソリューションを展開しました。

于 2012-04-23T11:13:01.613 に答える
1

したがって、スケジュールされたタスク (非インタラクティブ) から実行されるプロセス A があり、プロセス B を X (ローカル管理者) として起動します。

  • あなたはそのボックスの管理者ですか?
  • B にはウィンドウ ハンドルまたはコンソール ハンドルが必要ですか?

ProcessMonitor を使用して、どの呼び出しが正確に失敗したかを確認できます。私の推測では、B はデスクトップと対話しようとしていて、それを行う許可を拒否されています。

たとえばユーザー A としてログインし、スケジューラを使用して対話型プロセスを起動すると、ウィンドウが正常に表示されます。しかし、ユーザー B (ゲスト ユーザーなど) としてログインし、A (ローカル管理者など) として実行される対話型プロセスを起動すると、UI の表示についてシステムが何をすべきかという問題が実際に発生します。

要約すると、ログインしていないユーザーの資格情報を使用するインタラクティブなプロセスがある場合、何をすべきかについて明確な勝者はありません。

于 2012-07-09T19:57:01.603 に答える