我在c#中创建了一个窗口服务。现在我想安装该服务,但在安装之前,我想要一个窗口表单,客户端输入产品密钥来安装服务。如果他输入正确的密钥,则在客户的系统上安装该服务。 简而言之,我想安装一个带窗口形式应用程序的窗口服务。 为此,我创建了一个解决方案,并在其中添加了2个项目(窗口服务和窗口表单应用程序)。现在如何通过窗口应用程序安装窗口服务。
我是c#的新手。请帮助我如何实现这一目标。
答案 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");