C# 用 Process 启动的程序不能成功显示托盘图标(在右下角),但双击却可以

global_biz 2014-07-07 06:54:31
Hi,

我在 c# 里面做了一个 Form 应用 TestForm, 这个 TestForm 在启动时会最小化到右下角,并显示一个托盘图标。

这个 TestForm 在编绎成功后,直接比击 TestForm.exe 就可以直接在右下角显示托盘图标并弹出一个小提示。

我现在做了另一个 Windows Service 的应用,在 Windows Service 应用里面就是要启动这个 TestForm.
但是,发现用以下程序是可以启动到 TestForm, 但是并不能在右下角显示出托盘图标并弹出一个小提示:


string testForm = Path.Combine(assemblyFolder, "TestForm.exe");
System.Diagnostics.Process[] testFormProcesses = System.Diagnostics.Process.GetProcessesByName("TestForm");
if (testFormProcesses == null || testFormProcesses.Length == 0)
{
Process process = System.Diagnostics.Process.Start(testForm);

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
//proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
proc.StartInfo.FileName = testForm;
//proc.StartInfo.RedirectStandardError = false;
//proc.StartInfo.RedirectStandardOutput = false;

proc.Start();

//这里面可以见到 TestForm.exe 运行但没有右下角的托盘图标。
//但是,如果不使用 Process 来启动,而是直接手工在 Windows 上双击 TestForm.exe 就可以直接在右下角显示托盘图标并弹出一个小提示
}


上面的参数我试过改了也没用。

请帮下忙,谢谢。
...全文
583 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
global_biz 2014-07-08
  • 打赏
  • 举报
回复
引用 3 楼 LargeSkyMensk 的回复:
需要注意,两个问题,,, 第一:从Vista开始,服务与用户进程运行在不同的会话中,你这种方法从服务中启动TestForm程序,则该程序运行在会话0,而那个会话你是看不到的。所以你看不到UI。 第二:启动程序时,子进程会继承父进程的环境变量,包括当前工作目录等一些信息。你需要使用ProcessStartInfo ,设置里面的WorkingDirectory,以防止有些程序考虑不周到,无法正常加载数据。
谢谢。
梦吟情诗 2014-07-08
  • 打赏
  • 举报
回复
你启动一个程序需要费那么大的劲么?一句代码搞定。

Process.Start("程序路径");
於黾 2014-07-08
  • 打赏
  • 举报
回复
不过应该有办法能够让服务启动程序的时候按某个用户来启动 AB_PLC的OPC:RSLINX软件,就是后台运行一个服务,当有OPC访问的时候,启动客户端程序显示. 不过C#能否实现就不知道了.那个目测是JAVA的.
於黾 2014-07-08
  • 打赏
  • 举报
回复
你在电脑上新建一个用户,用户1开启程序,切换到用户2,也是看不到的. 服务启动的程序,正常登陆用户都看不到
相思梦 2014-07-08
  • 打赏
  • 举报
回复
你不会用 ShellExecuteA or CateProcess?
largeskymengsk 2014-07-07
  • 打赏
  • 举报
回复
需要注意,两个问题,,, 第一:从Vista开始,服务与用户进程运行在不同的会话中,你这种方法从服务中启动TestForm程序,则该程序运行在会话0,而那个会话你是看不到的。所以你看不到UI。 第二:启动程序时,子进程会继承父进程的环境变量,包括当前工作目录等一些信息。你需要使用ProcessStartInfo ,设置里面的WorkingDirectory,以防止有些程序考虑不周到,无法正常加载数据。
global_biz 2014-07-07
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
估计和程序路径有关。图标从外部文件加载,没有正确处理相对路径。
是什么意思? 为什么我双击又可以显示托盘图标? 另外,那个 TestForm.exe 运行后,会在后台当成一个服务接收一些事件,我从 TestForm.exe 生成的日志可以看到,当 TestForm.exe 被运行后,不管是用双击或者是用 Process 启动,那些日志都是正常在后台运行。 是不是因为我第二个是 Windows Service (Windows 服务)的应用,所以,在 Windows Service 里面不能显示 Form 界面吗??? 可否给个解决方法?因为现在需要从Windows Service 服务程序里面启动有界面的 TestForm.exe
threenewbee 2014-07-07
  • 打赏
  • 举报
回复
估计和程序路径有关。图标从外部文件加载,没有正确处理相对路径。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧