首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务启动TrayIcon

从服务启动TrayIcon
EN

Stack Overflow用户
提问于 2019-03-06 01:05:14
回答 1查看 33关注 0票数 0

我有一个轮询在线.NET的C#服务( API 4.6.2)。绑在上面的还有一个托盘图标。服务应该让托盘图标保持运行,而图标应该让服务保持运行。

如果由于任何原因,服务必须重新启动托盘图标,那么它会重新启动,但图标不会回来。我试图解决这个问题,因为用户认为如果图标不在那里,它就不起作用。当他们重新启动应用程序并取回图标时,它会运行以下代码:

代码语言:javascript
复制
 Process process = Process.GetCurrentProcess();
        var dupl = (Process.GetProcessesByName(process.ProcessName));
        if (dupl.Length > 1)
        {
            foreach (var p in dupl)
            {
                if (p.Id != process.Id)
                    p.Kill();
            }
        }

以确保在任何时候都只有一个副本。我知道服务不应该直接访问UI,但是没有间接的方法吗?我可以通过另一个DLL或其他什么传递调用吗?

我对此进行了相当多的研究,发现有太多的资源最终都过时了。即使是去年的这个,看起来很有希望的这个也不起作用。How to create process as user with arguments

此服务部署在从Windows 32位到Windows 10的计算机上。并不总是有用户登录,但为了简单起见,让我们假设有用户登录,我可以稍后错误处理其余部分。

EN

回答 1

Stack Overflow用户

发布于 2019-03-06 01:11:06

事实上,你的服务不应该与用户交互,如果你发现一篇文章对如何做到这一点提出了建议,它迟早会失败。

正确的方法是使用两个应用程序。服务和用户界面。服务作为服务运行。用户界面应用程序作为用户启动(可能是从他们的自动启动)。然后,这两个应用程序通过某种IPC进行通信,可能是套接字或管道。用户界面可以显示托盘图标并显示它从服务获得的状态消息,或者它可以通过例如托盘图标上下文菜单向它从用户获得的服务发送命令。

因此,不要试图伪造解决方案。它不会正常工作,因为它不应该正常工作。构建两个应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55008054

复制
相关文章

相似问题

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