インストーラを作成せずにC#で作成したWindowsサービスをインストールする方法があるかどうかは知りませんか?インストーラを作成せずにC#Windowsサービスをインストールするにはどうすればよいですか?
11
A
答えて
7
installutilを使用できます。コマンドラインから
:installutil YourWinService.exe
このユーティリティは、.NET Frameworkの
8
あなたが試みることができると一緒にインストールされているWindows sc command
C:\WINDOWS\system32>sc create
説明: SC commuで使用されるコマンドラインプログラムですNT Service Controllerおよびサービスと結びついています。
8
私にはインストールを行うクラスが含まれています。私はアプリケーションをインストールまたはアンインストールするコマンドラインパラメータを使用してアプリケーションを呼び出します。また、以前はコマンドラインから直接起動したときにサービスをインストールするかどうかをユーザーに知らせるメッセージを表示していました。ここで
は、私が使用するクラスです:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using Microsoft.Win32;
namespace [your namespace here]
{
class IntegratedServiceInstaller
{
public void Install(String ServiceName, String DisplayName, String Description,
System.ServiceProcess.ServiceAccount Account,
System.ServiceProcess.ServiceStartMode StartMode)
{
System.ServiceProcess.ServiceProcessInstaller ProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller();
ProcessInstaller.Account = Account;
System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller();
System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext();
string processPath = Process.GetCurrentProcess().MainModule.FileName;
if (processPath != null && processPath.Length > 0)
{
System.IO.FileInfo fi = new System.IO.FileInfo(processPath);
//Context = new System.Configuration.Install.InstallContext();
//Context.Parameters.Add("assemblyPath", fi.FullName);
//Context.Parameters.Add("startParameters", "Test");
String path = String.Format("/assemblypath={0}", fi.FullName);
String[] cmdline = { path };
Context = new System.Configuration.Install.InstallContext("", cmdline);
}
SINST.Context = Context;
SINST.DisplayName = DisplayName;
SINST.Description = Description;
SINST.ServiceName = ServiceName;
SINST.StartType = StartMode;
SINST.Parent = ProcessInstaller;
// http://bytes.com/forum/thread527221.html
// SINST.ServicesDependedOn = new String[] {};
System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary();
SINST.Install(state);
// http://www.dotnet247.com/247reference/msgs/43/219565.aspx
using (RegistryKey oKey = Registry.LocalMachine.OpenSubKey(String.Format(@"SYSTEM\CurrentControlSet\Services\{0}", SINST.ServiceName), true))
{
try
{
Object sValue = oKey.GetValue("ImagePath");
oKey.SetValue("ImagePath", sValue);
}
catch (Exception Ex)
{
// System.Console.WriteLine(Ex.Message);
}
}
}
public void Uninstall(String ServiceName)
{
System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller();
System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext("c:\\install.log", null);
SINST.Context = Context;
SINST.ServiceName = ServiceName;
SINST.Uninstall(null);
}
}
}
そして、ここでは、私はそれを呼び出す方法は次のとおりです。
const string serviceName = "service_name";
const string serviceTitle = "Service Title For Services Control Panel Applet";
const string serviceDescription = "A longer description of what the service does. This is used by the services control panel applet";
// Install
IntegratedServiceInstaller Inst = new IntegratedServiceInstaller();
Inst.Install(serviceName, serviceTitle, serviceDescription,
// System.ServiceProcess.ServiceAccount.LocalService, // this is more secure, but only available in XP and above and WS-2003 and above
System.ServiceProcess.ServiceAccount.LocalSystem, // this is required for WS-2000
System.ServiceProcess.ServiceStartMode.Automatic);
// Uninstall
IntegratedServiceInstaller Inst = new IntegratedServiceInstaller();
Inst.Uninstall(serviceName);
+0
これは魅力的です。とても便利な。投稿ありがとう! –
関連する問題
- 1. シングルイメージファイルをインストールする簡単なインストーラを作成するにはどうすればよいですか?
- 2. Javaアプリケーションの.exe版をインストールする.exeインストーラを作成するにはどうすればよいですか?
- 3. JDK全体をインストールせずにWindowsでJavaコードをコンパイルするにはどうすればよいですか?
- 4. Windowsサービスvs2003で作成されたmsiインストーラがインストール中にwin7にハングアップする
- 5. WindowsインストーラからWindowsサービスをインストールするには
- 6. Windows 10 HWAバンドルのインストーラを作成するにはどうすればよいですか?
- 7. 1人のインストーラでJava EE Webアプリケーションのインストーラを作成するにはどうすればよいですか?
- 8. WindowsアプリケーションとWindowsサービスを使用してセットアッププロジェクトを作成するにはどうすればよいですか?
- 9. Counter MyAppボイラープレートコードを作成せずにFlutter Appを作成するにはどうすればよいですか?
- 10. Visual Studio 2010 C#プロジェクトのインストーラを作成するにはどうすればよいですか?
- 11. Windows 10上でサービスにSSHトンネルコマンドを作成するにはどうすればよいですか?
- 12. サービスを起動せずにglobal.asaxからサービスを開始するにはどうすればよいですか?
- 13. .controller()で$ locationサービスを使用せずに$ locationサービスにアクセスするにはどうすればよいですか?
- 14. プラグインをインストールせずにWordpressでAWS for PHPをインストールするにはどうすればよいですか?
- 15. Topshelfサービスをリモートマシンにインストールするにはどうすればよいですか?
- 16. Windows AzureにOpenCVをインストールするにはどうすればよいですか?
- 17. WindowsにTarantulaをインストールするにはどうすればよいですか?
- 18. Windows 10にRailsをインストールするにはどうすればよいですか?
- 19. Windows 10にDjangoをインストールするにはどうすればよいですか?
- 20. 指定したユーザーでWindowsサービスを作成するにはどうすればよいですか?
- 21. C++で使用するためにWindowsにPDCursesをインストールするにはどうすればよいですか?
- 22. フォームを送信せずにリダイレクトするボタンを作成するにはどうすればよいですか?
- 23. Windowsサービスを別のシステムにインストールするにはどうすればよいですか?
- 24. インストール時にWindowsサービスのインストールディレクトリを変更するにはどうすればよいですか?
- 25. C#で書かれたWindowsサービスでServiceNameを取得するにはどうすればよいですか?
- 26. ウィジェットを作成せずにCKEditorをYii2に統合するにはどうすればよいですか?
- 27. ghost-installerで作成されたインストーラをリバースエンジニアリングするにはどうすればよいですか?
- 28. C#でDataGridを作成するにはどうすればよいですか?
- 29. C++でハッシュテーブルを作成するにはどうすればよいですか?
- 30. C#でカスタムコントロールを作成するにはどうすればよいですか?
、私はあなたがまだサービスの設定で動作するようにます。installutilため、プロジェクトでインストーラを作成する必要があると考えていますプロパティ: http://www.developer.com/net/net/article.php/11087_2173801_2 –
Danは正しいですが、インストーラを作成する必要があります。 scコマンド(下記参照)は、インストーラを必要とせずにWindowsサービスのインストール/削除/起動/停止などを可能にします(これはどういうわけか、質問の核心です)。 インストーラに焼き付けられたサービスメタデータ(スタートアップの種類、アカウント名、再起動のプロパティなど)の多くを外部に保存できるので便利です。これは、再コンパイルを必要としないため、MSBuildやNantなど、展開用のスクリプトと組み合わせて使用すると二重に役立ちます。 これは、C#、C、C++で書かれているかどうかをインストールすることもできます。 –
「インストーラ」クラスが必要ですが、setup.exeの意味でのインストーラはありません – Nathan