我正在开发一个应该在PC启动时运行的应用程序(Windows10 C# Windows )
因此,我使用schtask如下所述:
schtasks /create /sc ONSTART /tn "RamanLocalServer" /tr "$INSTDIR\RamanLocalServer.exe" /ru System
schtasks /run /tn "RamanLocalServer"这是一个Rahman服务器,它根本没有UI (只有控制台应用程序)
这是我在TaskManager上的程序

现在,我希望这个本地服务器向用户显示通知
根据C# How to Make a BalloonToolTip from a Non-Form Application的说法,这样做是可能的
但是,由于我的程序位于后台进程中,所以它没有显示Balloontooltip。
我把代码包装成这样
private static void BalloonTip()
{
notifyIcon = new NotifyIcon();
notifyIcon.Icon = Properties.Resources.new_icon;
notifyIcon.Visible = true;
log.Debug("Balloon on server");
try
{
notifyIcon.ShowBalloonTip(600, "Rahman Updater", "New update is available\nGo to Rahman Manager to update", ToolTipIcon.Info);
}
catch (Exception e)
{
log.Error(e.Message);
log.Error(e.StackTrace);
throw;
}
}日志文件对异常没有说明。
我试着使用Toast,如这里所解释的,https://learn.microsoft.com/en-us/uwp/api/windows.ui.notifications.toastnotification?view=winrt-20348
我就是这样写代码的
private static void CallToast()
{
log.Debug("Toast1");
try
{
//// Requires Microsoft.Toolkit.Uwp.Notifications NuGet package version 7.0 or greater
//new ToastContentBuilder()
.AddArgument("action", "viewConversation")
.AddArgument("conversationId", 9813)
.AddText("Guardian Updater")
.AddText("New update is available\nGo to Guardian Manager to update")
.Show(); // Not seeing the Show() method? Make sure you have version 7.0, and if you're using .NET 5, your TFM must be net5.0-windows10.0.17763.0 or greater
}
catch (Exception e)
{
log.Error(e.Message);
log.Error(e.StackTrace);
}
}它在日志Access denied. (Exception occurred HRESULT: 0x80070005 (E_ACCESSDENIED)上显示了此错误。
但是,如果我像这样双击它来启动这个程序,它对Toast/Balloon工具提示都有效。

根据堆栈溢出社区(对不起,我找不到链接),我了解到
为了使其工作(Toast/Balloon工具提示),代码应该在UI线程上运行
所以我的问题是,有可能吗?
若否,是否有任何建议?
发布于 2021-12-08 05:18:38
那是我在StackOverflow帐户重新启动之前问的问题
我解决这个问题的方法是:
https://stackoverflow.com/questions/69010406
复制相似问题