服务在调试时有效,但现在当我安装它时

Service works on debug but now when i Install it

我正在开玩笑地创建一个愚蠢的小服务,应该在桌面上创建一个“无敌”的 txt,如果删除它会重新创建。 它在调试时有效,但当我安装服务时它不会创建 txt。

我有:

当我调试(我使用 Topshelf)时代码可以工作,但是当我安装服务时它不起作用。

创建 txt(和构造函数)的代码:

 public Invincible()
    {
        _timer = new Timer(3000) { AutoReset = true };
        _timer.Elapsed += TimerElapsed;
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        string[] frase = new string[] {"NON PUOI RIMUOVERE QUESTA MALEDIZIONE <3"};
        string curFile = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+"/Invincible_Curse.txt";
        string curFile2 = "C:/temp/Demos/Invincible_Curse.txt";
        if (!File.Exists(curFile))
        {
            File.AppendAllLines(curFile, frase);
        }
    }

主线:

 static void Main(string[] args)
    {
        var exitCode = HostFactory.Run(x =>
        {
            x.Service<Invincible>(s =>
            {

                s.ConstructUsing(Invincible => new Invincible());
                s.WhenStarted(Invincible => Invincible.Start());
                s.WhenStopped(Invincible => Invincible.Stop());

                x.SetServiceName("InvincibleService");
                x.SetDisplayName("Invincible Service");
                x.SetDescription("Cerca di sopravvivere");

            });


        });

        int exitCodeValue = (int)Convert.ChangeType(exitCode, exitCode.GetTypeCode());
        Environment.ExitCode = exitCodeValue;
    }

感谢您的帮助。

您的代码看起来还不错,尽管您可以进行一些重构。 例如,像这样在这部分移动:

var exitCode = HostFactory.Run(x =>
        {
            x.Service<Invincible>(s =>
            {
                s.ConstructUsing(Invincible => new Invincible());
                s.WhenStarted(Invincible => Invincible.Start());
                s.WhenStopped(Invincible => Invincible.Stop());
            });

            x.SetServiceName("InvincibleService");
            x.SetDisplayName("Invincible Service");
            x.SetDescription("Cerca di sopravvivere");
        });

您的问题是,您 运行 的 windows 服务正在使用不同的 Windows 用户帐户,而不是您使用的 Windows 用户帐户用于登录和使用您的 PC。所以他们的桌面路径是不一样的。 Windows 上的每个用户帐户都有不同的桌面路径。

要修复它,只需使用您希望 txt 文件显示的帐户登录服务即可。