Windows にログイン時に GUI 管理アプリケーションを起動する方法

Windows にログイン時に GUI 管理アプリケーションを起動する方法

子供が PC で遊ぶ時間を制御するための小さなアプリケーションを C# で作成しました。

今、子供が自分のプロファイルにログインしたときに、このアプリを管理者として実行する方法を探しています。アプリは画面にいくつかの警告を表示し、ファイルにいくつかの統計を保存します。したがって、非表示またはバックグラウンドで実行することはできません (画面にメッセージを表示する必要があります)。また、標準ユーザー権限で実行することもできません (ログは削除できます...)

Windows タスク スケジューラ経由でこれを動作させようと何時間も費やしましたが、このアプリを表示できませんでした...

どのようなチップでもとても感謝 !

PS 他のユーザーのデスクトップで GUI 管理アプリを実行できない場合は、(賢い) 子供が簡単にアクセスできるようにログ ファイルをどこにどのように保存すればよいか、誰かアドバイスをいただけないでしょうか :)

答え1

正しい方法は、アプリをサービスとして、または別のユーザーとして実行し、ウィンドウをユーザー(子供)のデスクトップに送信することです。インタラクティブ サービスに関する MSDN ページサービスは完全にインタラクティブに実行できなくなりましたが、異なるアカウントで実行しているユーザーを含むユーザーと間接的に対話することはできます。WTSSendMessage関数は現在ログイン中のセッションにメッセージボックスを表示するために使用できます。または、プロセスでCreateProcessAsUser(アクセス権がある場合) ユーザーのセッション内に対話可能なプロセスを作成します (親プロセスは、ユーザーが削除できないログ ファイルなどを作成できます)。

編集: これらの関数を使用するために、プロセスをサービスとして実行する必要はありません。これらの関数はサービスにとって便利ですが、別のユーザーとして (非対話的に) 実行される他のプロセスにとっても便利です。

編集 2: ログ ファイルについては、ログ記録プロセスに対して追加のみの権限で設定できます (設定する必要があります)。こうすることで、プログラムが子供の権限で実行されている場合でも、ファイルに追加のみ実行できます (削除、上書き、切り捨てなどを実行できません)。追加アクセスのみを要求するファイルを開くことができます。

もちろん、子供がプロセスを終了してしまうのを防ぐことはできません。それを防ぐ方法はありません。それ別のアカウントとして実行しなくても、ウォッチドッグ プロセス (別のユーザーとして実行されている可能性があります) は、要求に応じてすぐに再起動を試みることができます。

関連情報