子供が PC で遊ぶ時間を制御するための小さなアプリケーションを C# で作成しました。
今、子供が自分のプロファイルにログインしたときに、このアプリを管理者として実行する方法を探しています。アプリは画面にいくつかの警告を表示し、ファイルにいくつかの統計を保存します。したがって、非表示またはバックグラウンドで実行することはできません (画面にメッセージを表示する必要があります)。また、標準ユーザー権限で実行することもできません (ログは削除できます...)
Windows タスク スケジューラ経由でこれを動作させようと何時間も費やしましたが、このアプリを表示できませんでした...
どのようなチップでもとても感謝 !
PS 他のユーザーのデスクトップで GUI 管理アプリを実行できない場合は、(賢い) 子供が簡単にアクセスできるようにログ ファイルをどこにどのように保存すればよいか、誰かアドバイスをいただけないでしょうか :)
答え1
正しい方法は、アプリをサービスとして、または別のユーザーとして実行し、ウィンドウをユーザー(子供)のデスクトップに送信することです。インタラクティブ サービスに関する MSDN ページサービスは完全にインタラクティブに実行できなくなりましたが、異なるアカウントで実行しているユーザーを含むユーザーと間接的に対話することはできます。WTSSendMessage
関数は現在ログイン中のセッションにメッセージボックスを表示するために使用できます。または、プロセスでCreateProcessAsUser
(アクセス権がある場合) ユーザーのセッション内に対話可能なプロセスを作成します (親プロセスは、ユーザーが削除できないログ ファイルなどを作成できます)。
編集: これらの関数を使用するために、プロセスをサービスとして実行する必要はありません。これらの関数はサービスにとって便利ですが、別のユーザーとして (非対話的に) 実行される他のプロセスにとっても便利です。
編集 2: ログ ファイルについては、ログ記録プロセスに対して追加のみの権限で設定できます (設定する必要があります)。こうすることで、プログラムが子供の権限で実行されている場合でも、ファイルに追加のみ実行できます (削除、上書き、切り捨てなどを実行できません)。追加アクセスのみを要求するファイルを開くことができます。
もちろん、子供がプロセスを終了してしまうのを防ぐことはできません。それを防ぐ方法はありません。それ別のアカウントとして実行しなくても、ウォッチドッグ プロセス (別のユーザーとして実行されている可能性があります) は、要求に応じてすぐに再起動を試みることができます。