編集:
わかりました。今のところ、数え切れないほどの投稿を見ていると、解決策にたどり着きました。サービスから必要なことを実行できません。コンピューターで常にオンになるように、サービスにしたかったのです。しかし、どうやらサービスの書き方では、「サービスはユーザーのデスクトップと同じスペースで実行されない」ため、実行したいコマンドを実行できない可能性があるため、少なくともデスクトップをキャプチャすることはできません。それがこれまでに収集したものです。
現時点では、これはここに残しておき、サービスから直接実行するのではなく、ログオン時にユーザー名でプログラムを起動してデスクトップをキャプチャする方法を見つけることができます。
私は今、これを理解しようとして数時間壁に頭をぶつけてきました。これまでサービスを作成したことがなく、フォームアプリケーションだけでした。次のプロジェクト (クライアントサーバーモデルのクライアント監視ユーティリティ) をインストールする必要があります。クライアント マシン上のサービスとしてデータを送信し、メイン サーバーにデータを送り返します。
サービスの書き方やインストール方法などを調べる前に、サービスを書いたことはありませんでした。私はそれをすべて正常に動作させました.現在動作しているバージョンは、その動作を示すために30秒ごとにイベントログを吐き出します.
ファイルへの書き込み権限があると想定したため、LocalSystemで実行することから始めましたが、失敗した後、LocalServiceを試しましたが、どちらも機能しませんでした。
ディレクトリを C:\WatcherData\Test.jpg として指定しています
通常のフォームアプリケーションでテストしました(動作します)
OutputImage.Save("c:\watcherdata\test.jpg", ImageFormat.Jpeg);
例外もイベントも発生しないだけなのに、その直前に EventLog メッセージが入っているので、そこまで来ているはずですよね?
ご不明な点がございましたら、お気軽にお問い合わせください。
編集:ここに小さなコードがあります:
private void ServiceWorkerThread(object state)
{
while (!this.stopping)
{
this.eventLog1.WriteEntry("This is a test2");
CallMe();
Thread.Sleep(30000);
}
this.stoppedEvent.Set();
}
private void CallMe()
{
try
{
int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap OutputImage = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image) OutputImage);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
OutputImage.Save("c:\\watcherdata\\test.jpg", ImageFormat.Jpeg);
}
catch (Exception e)
{
this.eventLog1.WriteEntry(e.Message + "\r\n" + e.StackTrace, EventLogEntryType.Error);
}
}
私が言ったように、そのほとんどはマイクロソフトのサンプルドキュメントから取られました。私はサービスに慣れていません
現在、まだ解決しようとしています。
編集2
もう少し遊んだ後、なんとかファイルに書き込むことができました。問題のほとんどは、サービスとインストーラーの構築方法に関する知識の欠如にあることに気付いた後、サービスを構築したときにインストーラーを再構築していなかったようです。
今では、すべて黒の大きな黒い画像を書き込むだけです。しかし、少なくともその執筆!