Visual Studio 2010で新しいWindowsサービスを作成すると、InstallUtilとnet startを使用してサービスを実行することを示すメッセージが表示されます。
次の手順を試しました。
ステップ4の出力
トランザクションインストールの実行。
インストールのインストールフェーズの開始。
C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exeアセンブリの進行状況については、ログファイルの内容を参照してください。
ファイルはC:\ Users\myusername\Documents\Visual Studio 2010\Projects\Tes tService\TestService\obj\x86\Debug\TestService.InstallLogにあります。
アセンブリ 'C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestS ervice\TestService\obj\x86\Debug\TestService.exeをインストールしています。
影響を受けるパラメーターは次のとおりです。
logtoconsole =
ログファイル= C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\T estService\obj\x86\Debug\TestService.InstallLog
assemblypath = C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestServ ice\TestService\obj\x86\Debug\TestService.exe
RunInstallerAttribute.Yes属性を持つパブリックインストーラーは、C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exeアセンブリに見つかりませんでした。
インストールフェーズが正常に完了し、コミットフェーズが開始されています。
C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exeアセンブリの進行状況については、ログファイルの内容を参照してください。
ファイルはC:\ Users\myusername\Documents\Visual Studio 2010\Projects\Tes tService\TestService\obj\x86\Debug\TestService.InstallLogにあります。
アセンブリ 'C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestS ervice\TestService\obj\x86\Debug\TestService.exeをコミットしています。
影響を受けるパラメーターは次のとおりです。
logtoconsole =
ログファイル= C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\T estService\obj\x86\Debug\TestService.InstallLog
assemblypath = C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestServ ice\TestService\obj\x86\Debug\TestService.exe
RunInstallerAttribute.Yes属性を持つパブリックインストーラーは、C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exeアセンブリに見つかりませんでした。
インストーラーがないため、InstallStateファイルを削除します。
コミットフェーズが正常に完了しました。
トランザクションインストールが完了しました。
ステップ5の出力
サービス名が無効です。
NET HELPMSG 2185と入力すると、さらにヘルプが利用できます。
デザイナーでService.csファイルを開き、右クリックして、メニューオプション[インストーラーの追加]を選択する必要があります。
すぐにインストールされるわけではありません...最初にインストーラークラスを作成する必要があります。
サービスインストーラーの参照:
かなり古い...しかし、これは私が話していることです:
C#のWindowsサービス:インストーラーの追加(パート3)
これにより、ProjectInstaller.cs
が自動的に作成されます。次に、これをダブルクリックしてデザイナーを入力し、コンポーネントを構成できます。
serviceInstaller1
には、サービス自体のプロパティがあります。Description
、DisplayName
、ServiceName
、およびStartType
が最も重要です。
serviceProcessInstaller1
には、次の重要なプロパティがあります。Account
は、サービスを実行するアカウントです。
例えば:
this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
見つめている:
RunInstallerAttribute.Yes属性を持つパブリックインストーラーは、C:\ Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exeアセンブリに見つかりませんでした。
コードにインストーラークラスがない可能性があります。これはInstaller
を継承するクラスで、installutil
にサービスとして実行可能ファイルをインストールする方法を指示します。
追伸ここには、コードをコピーまたは使用できる、自己インストール/デバッグ可能なWindowsサービステンプレートがあります。 デバッグ可能、自己インストールWindowsサービス
インストーラを作成し、そのエラーメッセージを取り除く別の方法を次に示します。また、VS2015 Expressには「Add Installer」メニュー項目がないようです。
クラスを作成し、以下のコードを追加し、参照System.Configuration.Install.dllを追加するだけです。
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;
namespace SAS
{
[RunInstaller(true)]
public class MyProjectInstaller : Installer
{
private ServiceInstaller serviceInstaller1;
private ServiceProcessInstaller processInstaller;
public MyProjectInstaller()
{
// Instantiate installer for process and service.
processInstaller = new ServiceProcessInstaller();
serviceInstaller1 = new ServiceInstaller();
// The service runs under the system account.
processInstaller.Account = ServiceAccount.LocalSystem;
// The service is started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "SAS Service";
// Add installer to collection. Order is not important if more than one service.
Installers.Add(serviceInstaller1);
Installers.Add(processInstaller);
}
}
}
2つの典型的な問題:
別の考えられる問題(私が遭遇した):
ProjectInstaller
クラスがpublic
であることを確認してください。正直に言って、私はそれを正確にどのように行ったかはわかりませんが、次のようにイベントハンドラをProjectInstaller.Designer.cs
に追加しました。
this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
ProjectInstaller.cs
でハンドラー関数を作成する自動プロセス中に、クラス定義が
public class ProjectInstaller : System.Configuration.Install.Installer
に
partial class ProjectInstaller : System.Configuration.Install.Installer
置き換えpublic
キーワードとpartial
。だから、それを修正するためには
public partial class ProjectInstaller : System.Configuration.Install.Installer
Visual Studio 2013 Communityエディションを使用しています。
VS 2010および.NET 4.0以降のステルス変更
RunInstallerAttribute.Yes属性を持つパブリックインストーラーが見つかりませんでした
.NETにはエイリアスの変更またはコンパイラのクリーンアップがあり、特定のケースでこの小さな調整が明らかになる場合があります。
次のコードがある場合は…
RunInstaller(true) // old alias
更新する必要があるかもしれません
RunInstallerAttribute(true) // new property spelling
これは、コンパイル時または実行時にカバーの下で変更されたエイリアスのようなもので、このエラー動作が発生します。上記のRunInstallerAttribute(true)に対する明示的な変更により、すべてのマシンでのすべてのインストールシナリオで修正されました。
プロジェクトまたはサービスインストーラーを追加した後、「古い」RunInstaller(true)を確認し、新しいRunInstallerAttribute(true)に変更します
さらに別の落とし穴:インストーラー派生クラス(通常ProjectInstaller
)が名前空間階層の最上位にあることを確認し、別のパブリッククラス内でパブリッククラスを使用しようとしましたが、同じ古いエラーが発生します:
RunInstallerAttribute.Yes属性を持つパブリックインストーラーは見つかりませんでした