【问题标题】:Service works on debug but now when i Install it服务在调试时工作,但现在当我安装它时
【发布时间】:2021-10-25 15:12:07
【问题描述】:

我正在创建一个有点愚蠢的服务作为一个笑话,应该在桌面上创建一个“无敌”的 txt,如果删除它会重新创建。 它在调试时可以工作,但是当我安装服务时它不会创建 txt。

我有:

  • 添加以下代码行以管理员权限执行服务: <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" /> 到 app.manifest)。
  • 我检查了服务属性上的“授权与桌面交互”复选标记。

当我调试(我使用 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;
    }

感谢您的帮助。

【问题讨论】:

  • 你是指任务计划器中的任务还是windows服务?并请解释“不起作用”。
  • 这里需要粘贴代码。尝试创建 txt 文件的部分。
  • @Koray 我更新了帖子,谢谢。
  • @Steeve 这是一个 Windows 服务。 With doesn't work 我的意思是它没有按预期创建 txt,我很难弄清楚问题出在哪里,因为当我调试它时它确实有效。谢谢。

标签: c# windows-services


【解决方案1】:

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

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 用户帐户,而不是您用于登录和使用 PC 的 Windows 用户帐户。所以他们的桌面路径是不同的。 Windows 上的每个用户帐户都有不同的桌面路径。

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

【讨论】:

  • 感谢它的工作!有没有办法让它自动使用当前登录的用户?
  • 尝试使用此处描述的方法获取当前登录用户:link,然后尝试按照以下方法模拟用户:link 另外,如果上面的答案有帮助,您可以设置它作为公认的答案?以便其他有相同问题的用户也可以尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多