WindowsサービスからWebブラウザを起動する
-
22-09-2019 - |
質問
Windows サービスから Web ブラウザを起動することはできますか?C# で基本的なサービスを作成し、「LocalSystem」セキュリティ プロファイルの下にインストールしました。
サービスのコードは次のようになります。
namespace Bootloader
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
string target = "http://www.microsoft.com";
System.Diagnostics.Process.Start(target);
}
protected override void OnStop()
{
}
}
}
サービスが実行されても何も起こりません。Windows サービスのドキュメントには UI がないと記載されていますが、これは Web ブラウザの起動ができないことを意味しますか。
解決
それだけでXPに低いことが可能です。 Vistaでは、Windowsサービスは完全に別のデスクトップ上で実行されます。あなたはこれを実現するために、ユーザーのデスクトップで実行されている何かを持っている必要があります。
隠されたウィンドウでアプリを書くことの回避策として、起動時に開始します。
他のヒント
私はこれが可能であると思ういけません。これはサービスとして実行されている場合、私は、あなたがWatinを実行したい場合(ブラウザインスタンスで実行する機能テストは)私のCI環境から実行することができないことを知っているが、それはアプリとして実行された場合にのみ。
私はそれを行うことができると信じていますが、プロセス分離モデル(ウィンドウステーションとデスクトップ)に対処するために余分な作業を行う必要があります。このページを見てみましょう:ウィンドウへのプロセス接続駅を。ブラウザを変更することはできませんので、あなたは、コンテキストを変更して、ブラウザを起動するシムを作成する必要があります。
A回避策対話型のサービスとしてあなたのサービスを実行することですが、これは非推奨とWindowsの新しいバージョンでは動作しませんされます。
サービスがユーザーと対話することは明示的に禁止されています。Vista 以降、これは強制されています。を参照してください。 インタラクティブサービス:
重要 Windows Vistaの場合、サービスはユーザーと直接対話することはできません。したがって、インタラクティブサービスを使用してタイトルのセクションで言及されている手法は、新しいコードでは使用しないでください。
解決策は、対話部分を、ユーザー セッションの開始時に起動される通常のプロセスに分離することです (つまり、スタートアップ プログラム)。このプロセスは、選択した IPC (共有メモリ、ネット パイプ、TCP など) を介してサービスと通信できます。サービスは、必要に応じてプログラムを開始するようにこのプロセスに指示できます。