从windows窗体应用程序安装服务

本文关键字:安装 服务 应用程序 窗体 windows | 更新日期: 2023-09-27 18:18:18

我有一个按钮,允许用户浏览文件,然后将路径+文件名存储在一个变量中:

openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;

在浏览了。exe后,我想安装服务。

当前我们使用installutil作为admin运行bat。它也可以在管理员命令提示符下使用sc create来完成。

从windows表单安装服务的最简单方法是什么?

我可以创建一个这样的字符串吗:

sc create "servicename" binpath="filepath"

并从程序中运行它?

我正在考虑的另一个选择是让程序创建一个bat并以admin身份运行它?

从windows窗体应用程序安装服务

您可以使用以下代码来安装服务:

注意:您需要添加对System.ServiceProcess的引用

public static void InstallService(string serviceName, Assembly assembly)
{
    if (IsServiceInstalled(serviceName))
    {
        return;
    }
    using (AssemblyInstaller installer = GetInstaller(assembly))
    {
        IDictionary state = new Hashtable();
        try
        {
            installer.Install(state);
            installer.Commit(state);
        }
        catch
        {
            try
            {
                installer.Rollback(state);
            }
            catch { }
            throw;
        }
    }
}
public static bool IsServiceInstalled(string serviceName)
{
    using (ServiceController controller = new ServiceController(serviceName))
    {
        try
        {
            ServiceControllerStatus status = controller.Status;
        }
        catch
        {
            return false;
        }
        return true;
    }
}
private static AssemblyInstaller GetInstaller(Assembly assembly)
{
    AssemblyInstaller installer = new AssemblyInstaller(assembly, null);
    installer.UseNewContext = true;
    return installer;
}

你只需要这样称呼它:

Assembly assembly = Assembly.LoadFrom(filePath);
InstallService("name", assembly);

您可以使用Process。开始:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = String.Format(@"sc create '"servicename'" '"{0}'"", filepath);
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();

startInfo.Verb = "runas";行允许进程以管理员权限启动。