验证后安装窗口服务

时间:2017-11-26 19:31:12

标签: c#

我在c#中创建了一个窗口服务。现在我想安装该服务,但在安装之前,我想要一个窗口表单,客户端输入产品密钥来安装服务。如果他输入正确的密钥,则在客户的系统上安装该服务。 简而言之,我想安装一个带窗口形式应用程序的窗口服务。 为此,我创建了一个解决方案,并在其中添加了2个项目(窗口服务和窗口表单应用程序)。现在如何通过窗口应用程序安装窗口服务。

我是c#的新手。请帮助我如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

很快,您正在寻找从应用程序安装Windows服务。试试这样的事情;

    public void InstallWindowsService(string servicePath)
    {
        var isElevated = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
        if (isElevated)
        {
            ExecuteCommand("cmd.exe", string.Format("{0} {1}", InstallUtilArguments(), servicePath));
        }
        else
        {
            throw new Exception("You should run the application as Administrator.");
        }
    }

    private string InstallUtilArguments()
    {
        string framework = @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe";

        if (8 == IntPtr.Size || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))// for 64 bit Windows OS
        {
            framework = @"\Microsoft.NET\Framework64\v4.0.30319\installutil.exe";
        }

        return Environment.GetEnvironmentVariable("windir") + framework;
    }
    private string ExecuteCommand(string fileName, string arguments)
    {
        ProcessStartInfo processStartInfo = new ProcessStartInfo
        {
            FileName = fileName,
            Arguments = arguments,
            CreateNoWindow = true,
            WindowStyle = ProcessWindowStyle.Hidden,
            RedirectStandardOutput = true,
            UseShellExecute = false,
        };

        using (Process proc = new Process())
        {
            proc.StartInfo = processStartInfo;
            proc.Start();

            string output = proc.StandardOutput.ReadToEnd();
            if (string.IsNullOrEmpty(output))
            {
                output = proc.StandardError.ReadToEnd();
            }

            return output;
        }
    }

检测是运行提升的应用程序的用户,确定操作系统(64位或32位),构建InstallUtil参数,并使用cmd.exe

执行它

用法;

InstallWindowsService(@"C:\YourService\YourService.exe");