私はウィンドウサービスを作成し、それをインストールするには、そのデプロイメントプロジェクトを作成してインストールしました。インストール後、それを見つめました。正常に起動しました。
翌日、いくつかの変更を加え、再構築して再インストールしましたが、今はインストールされません。
次に、インストーラーの問題を考え、サービス用のカスタムインストーラーを作成して、いつでもコードを更新できるようにします。
誰かが将来これを必要とする場合に備えて、私はこのように作成しました。
public class MyInstaller : Installer
{
ServiceProcessInstaller spi;
ServiceInstaller si;
public MyInstaller()
{
spi = new ServiceProcessInstaller();
spi.Account = ServiceAccount.LocalSystem;
si = new ServiceInstaller();
si.StartType = ServiceStartMode.Manual;
si.ServiceName = "MyService";
si.DisplayName = "My Service";
si.Description = "service installed from command line";
this.Installers.Add(spi);
this.Installers.Add(si);
}
}
パラメータの引数を確認することで、メインメソッドから呼び出しました。
case "-i":
case "-install":
ti = new TransactedInstaller();
mi = new MyInstaller();
ti.Installers.Add(mi);
string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log";
ctx = new InstallContext(logPath, cmdline);
ti.Context = ctx; //.Context ( ctx );
ti.Install(new Hashtable());
break;
インストールしようとしているとき。 エラーSystem.Security.SecurityException:ソースが見つかりませんでしたが、一部またはすべてのイベントログを検索できませんでした。アクセスできないログ:セキュリティ。
私はそれをグーグルで調べて、サービスがアプリケーションのログをインストールしている間にアクセスし、そこにログを書き込むことを知るようになります。
イベントログを書き込みません。ロギング用のlog4netがあります。しかし、それでもデフォルトの動作です。
この問題を解決するにはどうすればよいですか?すべての権限があっても、インストールされません。
ありがとう
「管理者として実行」が必要になる場合があることを発見しました。コマンドプロンプトからインストールする場合は、「管理者として実行」でthatを起動する必要がある場合があります。
メッセージの根本的な原因は別だったかもしれませんが、LocalServiceではなくLocalSystemとして実行するようにサービスを変更することで修正しました(とにかくこれが必要です)。
「Windows 7 64ビット」および「Windows 10」では、次のことを確認する必要があります。
1)Visual StudioコマンドプロンプトAS ADMINISTRATORを実行します(右クリック..その他..管理者として調整)
2)exeファイルがある「obj」フォルダーに移動します。 (cd [\ objへのすべてのパス])3)installutil [myservice.exe]を起動します
「admin」として実行しないと、古いwin7でも失敗します。 :(
注:MSDNでは説明しています:
「Windowsサービスをインストールするには、サービスをインストールするコンピューターの管理者資格情報が必要です。」
:)