我正在尝试在需要安装 WinService 的地方进行某种安装程序。
我目前所做的是将 Service.exe 作为资源添加到我的安装程序项目中,然后将其所有字节写入特定文件夹。
成功将文件写入指定文件夹后,我使用 ManagedInstallerClass.InstallHelper 安装服务
我现在遇到的问题是 ManagedInstallerClass.InstallHelper 以某种方式锁定了服务可执行文件,因此我无法删除/覆盖文件(从程序外部或内部),因为它在安装程序应用程序运行时被阻止,从首先 ManagedInstallerClass.InstallHelper 调用服务文件。
这是导致此问题的我的代码。
private void button1_Click(object sender, EventArgs e)
{
try
{
UninstallAndStopServiceIfExist("RDPBFP_Service");
}
catch (Exception)
{
MessageBox.Show("Service not running, so cannot stop it!");
}
Thread.Sleep(1000);
//File.Delete(@"C:\RDPBFP\RDP-Bruteforce-Protector_Service.exe");
Directory.CreateDirectory(@"C:\RDPBFP");
File.WriteAllBytes(@"C:\RDPBFP\RDPBFP_Service.exe", Properties.Resources.RDPBFP_Service);
try
{
ManagedInstallerClass.InstallHelper(new string[] { @"C:\RDPBFP\RDPBFP_Service.exe" });
}
catch (Exception i_ex)
{
MessageBox.Show(i_ex.Message);
}
//StartService("RDPBFP_Service");
}
所以它在第一次运行时运行良好,但第二次运行它在 File.WriteAllBytes 处崩溃。该服务没有运行,当试图从 Windows 资源管理器中删除它时,Windows 清楚地告诉我它被我的安装程序应用程序使用。
我真的很感谢初学者(我是)友好的解释为什么会发生这种情况,最好是解决方案。我找到了这篇文章,但这对我不起作用。
谢谢指教。
PS:我知道有安装项目和更方便/专业的东西,但这不是我需要/想要的