服务在调试时有效,但现在当我安装它时
Service works on debug but now when i Install it
我正在开玩笑地创建一个愚蠢的小服务,应该在桌面上创建一个“无敌”的 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;
}
感谢您的帮助。
您的代码看起来还不错,尽管您可以进行一些重构。
例如,像这样在这部分移动:
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 文件显示的帐户登录服务即可。
我正在开玩笑地创建一个愚蠢的小服务,应该在桌面上创建一个“无敌”的 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;
}
感谢您的帮助。
您的代码看起来还不错,尽管您可以进行一些重构。 例如,像这样在这部分移动:
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 文件显示的帐户登录服务即可。