c#ManagedInstallerClass.InstallHelper阻止服务可执行文件

问题描述 投票:0回答:1

我正在尝试做某种需要安装WinService的安装程序。

我目前正在做的是将Service.exe作为资源添加到我的Installer项目中,然后将其所有字节写入特定的文件夹。

成功将文件写入指定的文件夹后,我使用ManagedInstallerClass.InstallHelper安装服务

我现在遇到的问题是ManagedInstallerClass.InstallHelper以某种方式锁定了Service可执行文件,因此我无法删除(覆盖程序外部或程序内部)文件,因为在安装应用程序运行时该文件已被阻止,从对服务文件的第一次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资源管理器中删除它时,我的安装程序已使用该服务。

我真的很感谢初学者(我很友好)解释为什么这会以我的方式发生,并且最好是有解决方案。我找到了this post,但这对我没有用。

非常感谢。

PS:我知道有安装项目和更方便/专业的东西,但是那不是我需要/想要的

c# service installer locked-files
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.