我做了一个windows的服务,每次启动会运行一个Windows form的托盘程序,系统开始后看不到托盘,而托盘程序单独运行是可以显示的。我上网查了下,有人说只要把服务设为能与桌面交互就行了,可是我的服务已经改为安装时就设置能与桌面交互了,但是托盘还是不出来啊...请高手帮忙

解决方案 »

  1.   

    請問你的托盤程序是設計Windows服務形式呢?還是分開兩套獨立的程序?你應該把代碼貼出,我來看看有什麼問題。
      

  2.   

    你可以看看http://www.codeproject.com/system/iconservice.asp,有完整的教程,還有Demo和源碼,應該能滿足你的需要,不懂再問。
      

  3.   

    我现在的托盘程序和服务程序是不同的程序来的,那个服务程序我是用调用api函数的方法安装,在安装服务的时候已经设置了SERVICE_INTERACTIVE_PROCESS为可以与桌面交互的值,托盘程序在单独启动时是有托盘显示的,那为什么服务程序调用托盘程序的时候还是无法显示托盘呢?
      

  4.   

    刚试过了,把托盘程序放在启动里面,重启开机后是能显示托盘的。
    下面是我服务调用托盘程序代码
    bool ico = false;
    Process[] processOnComputer = Process.GetProcesses();
                foreach (Process p in processOnComputer)
                {
                    if (p.ProcessName == "ServiceControl")
                    {
                        ico = true;
                    }
                }if (!ico)
                {
                    string control = serviceControl;
                    Process p = new Process();
                    ProcessStartInfo startInfo = new ProcessStartInfo(control);
                    p.StartInfo = startInfo;
                    p.Start(); 
                    
                }
    serviceControl是我的托盘程序.exe文件路径
    服务安装后,与桌面交互选项已自动选定
      

  5.   

    http://www.codeproject.com/system/iconservice.aspplease have a look
      

  6.   

    using System.Runtime.InteropServices;   //DllImport在该命名空间中;
    //------------------------------------------------------------------------------------
    [DllImport("user32.dll")] 
    private static extern bool IsIconic(IntPtr hWnd); //引入方法
    private System.Windows.Forms.NotifyIcon HideIcon;//在该对象的可视化设计窗中设置Icon图标、Text提示信息;
    //------------------------------------------------------------------------------------
    //双击托盘图标事件
    private void HideIcon_DoubleClick(object sender, System.EventArgs e)
    {
     this.Visible = true;
     this.WindowState = FormWindowState.Normal;
    }
    //------------------------------------------------------------------------------------
    //调整窗口大小事件(最小化)
    private void frmBTOnlEvlServer_Resize(object sender, System.EventArgs e)
    {
     if(IsIconic(this.Handle))
     {
      this.Visible = false;
     }
    }
    //------------------------------------------------------------------------------------
      

  7.   

    http://www.codeproject.com/KB/COM/SystemTrayIconInSvc.aspx