0

我正在尝试在需要安装 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:我知道有安装项目和更方便/专业的东西,但这不是我需要/想要的

4

1 回答 1

0

好吧,我现在正在通过 cmd Process 和 sc create 安装它,仍然想知道为什么 InstallHelper 在安装成功后不会释放文件

于 2019-12-29T05:02:37.413 回答