首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#可以从控制台应用程序发送Toast / BalloonTip作为后台进程吗?

C#可以从控制台应用程序发送Toast / BalloonTip作为后台进程吗?
EN

Stack Overflow用户
提问于 2021-09-01 08:38:47
回答 1查看 288关注 0票数 1

我正在开发一个应该在PC启动时运行的应用程序(Windows10 C# Windows )

因此,我使用schtask如下所述:

代码语言:javascript
复制
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

我把代码包装成这样

代码语言:javascript
复制
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

我就是这样写代码的

代码语言:javascript
复制
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线程上运行

所以我的问题是,有可能吗?

若否,是否有任何建议?

EN

回答 1

Stack Overflow用户

发布于 2021-12-08 05:18:38

那是我在StackOverflow帐户重新启动之前问的问题

我解决这个问题的方法是:

  1. 制作了一个新的可执行程序,负责balloonTip
  2. 让它永远在托盘上运行(c#能够这样做)
  3. 来触发可执行的,我将该程序注册到启动程序列表
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69010406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档