校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > .NET實現可交互的WINDOWS服務的實例代碼

.NET實現可交互的WINDOWS服務的實例代碼

熱門標簽:廈門四川外呼系統 怎樣在地圖標注消火栓圖形 地圖標注位置多的錢 山東防封電銷卡辦理套餐 百度地圖標注點擊事件 內蒙古智能電銷機器人哪家強 泰州手機外呼系統軟件 濟源人工智能電話機器人價格 杭州智能電話機器人

  這幾天想做個文件監控服務,看了一下網上的關于WINDOWS服務的文章,數量都不少,都只講了如何做一個最基本的服務,卻沒有講述如何與用戶進行交互。查看了MSDN,看一下關于服務的描述:

   Windows 服務應用程序在不同于登錄用戶的交互區域的窗口區域中運行。窗口區域是包含剪貼板、一組全局原子和一組桌面對象的安全對象。由于 Windows 服務的區域不是交互區域,因此 Windows 服務應用程序中引發的對話框將是不可見的,并且可能導致程序停止響應。同樣,錯誤信息應記錄在 Windows 事件日志中,而不是在用戶界面中引發。

   .NET Framework 支持的 Windows 服務類不支持與交互區域(即登錄用戶)進行交互。同時,.NET Framework 不包含表示區域和桌面的類。如果 Windows 服務必須與其他區域進行交互,則需要訪問非托管的 Windows API。

  也就是說我們要實現可交互的服務(比如我們想給服務在運行時做一些參數設置等),那我們一定要using System.Runtime.InteropServices

  那么來看一下如果才能實現一個可交互的服務呢。步驟與實現基本的服務一樣(各位可自行參考MSDN或網上google一下).

  在實現OnStart時要注意,這里可不能彈出一個FORM什么的。這樣做是沒有任何反應的。我們可以在這個方法里運行一個線程。該線程需要訪問窗口區域對象或桌面對象,當然 framework里是沒有提供這些的,要訪問非托管代碼的。

  來看一下代碼,再運行試一下。

復制代碼 代碼如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading;
using System.Runtime.InteropServices;
namespace FileWatchService
{
    publicclass Service1 : System.ServiceProcess.ServiceBase
    {
        ///
        /// 必需的設計器變量。
        ///
private System.ComponentModel.Container components =null;
        Thread threadForm =null;
        public Service1()
        {
            // 該調用是 Windows.Forms 組件設計器所必需的。
            InitializeComponent();

            // TODO: 在 InitComponent 調用后添加任何初始化
        }

        #region 組件設計器生成的代碼
        ///
        /// 設計器支持所需的方法 - 不要使用代碼編輯器
        /// 修改此方法的內容。
        ///
privatevoid InitializeComponent()
        {
            //
            // Service1
            //
this.ServiceName ="JadeWatchService";

        }
        #endregion
        [STAThread]
        staticvoid Main()
        {
            System.ServiceProcess.ServiceBase.Run(new Service1());

        }
        ///
        /// 清理所有正在使用的資源。
        ///
protectedoverridevoid Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components !=null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        ///
        /// 設置具體的操作,以便服務可以執行它的工作。
        ///
protectedoverridevoid OnStart(string[] args)
        {
            threadForm =new Thread(new ThreadStart(FormShow));
            threadForm.Start();
        }

        ///
        /// 停止此服務。
        ///
protectedoverridevoid OnStop()
        {
            if (threadForm !=null)
            {
                if (threadForm.IsAlive)
                {
                    threadForm.Abort();
                    threadForm =null;
                }
            }
        }

        void FormShow()
        {

            GetDesktopWindow();
            IntPtr hwinstaSave = GetProcessWindowStation();
            IntPtr dwThreadId = GetCurrentThreadId();
            IntPtr hdeskSave = GetThreadDesktop(dwThreadId);
            IntPtr hwinstaUser = OpenWindowStation("WinSta0", false, 33554432);
            if (hwinstaUser == IntPtr.Zero)
            {
                RpcRevertToSelf();
                return;
            }
            SetProcessWindowStation(hwinstaUser);
            IntPtr hdeskUser = OpenDesktop("Default", 0, false, 33554432);
            RpcRevertToSelf();
            if (hdeskUser == IntPtr.Zero)
            {
                SetProcessWindowStation(hwinstaSave);
                CloseWindowStation(hwinstaUser);
                return;
            }
            SetThreadDesktop(hdeskUser);

            IntPtr dwGuiThreadId = dwThreadId;

            Form1 f =new Form1(); //此FORM1可以帶notifyIcon,可以顯示在托盤里,用戶可點擊托盤圖標進行設置
            System.Windows.Forms.Application.Run(f);


            dwGuiThreadId = IntPtr.Zero;
            SetThreadDesktop(hdeskSave);
            SetProcessWindowStation(hwinstaSave);
            CloseDesktop(hdeskUser);
            CloseWindowStation(hwinstaUser);
        }

        [DllImport("user32.dll")]
        staticexternint GetDesktopWindow();

        [DllImport("user32.dll")]
        staticextern IntPtr GetProcessWindowStation();

        [DllImport("kernel32.dll")]
        staticextern IntPtr GetCurrentThreadId();

        [DllImport("user32.dll")]
        staticextern IntPtr GetThreadDesktop(IntPtr dwThread);

        [DllImport("user32.dll")]
        staticextern IntPtr OpenWindowStation(string a, bool b, int c);

        [DllImport("user32.dll")]
        staticextern IntPtr OpenDesktop(string lpszDesktop, uint dwFlags,
        bool fInherit, uint dwDesiredAccess);

        [DllImport("user32.dll")]
        staticextern IntPtr CloseDesktop(IntPtr p);

        [DllImport("rpcrt4.dll", SetLastError =true)]
        staticextern IntPtr RpcImpersonateClient(int i);


        [DllImport("rpcrt4.dll", SetLastError =true)]
        staticextern IntPtr RpcRevertToSelf();

        [DllImport("user32.dll")]
        staticextern IntPtr SetThreadDesktop(IntPtr a);

        [DllImport("user32.dll")]
        staticextern IntPtr SetProcessWindowStation(IntPtr a);
        [DllImport("user32.dll")]
        staticextern IntPtr CloseWindowStation(IntPtr a);
    }
}

標簽:百色 周口 臺州 喀什 洛陽 新鄉 朔州 朝陽

巨人網絡通訊聲明:本文標題《.NET實現可交互的WINDOWS服務的實例代碼》,本文關鍵詞  .NET,實現,可,交互,的,WINDOWS,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.NET實現可交互的WINDOWS服務的實例代碼》相關的同類信息!
  • 本頁收集關于.NET實現可交互的WINDOWS服務的實例代碼的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    在线观看中文字幕不卡| 欧美变态口味重另类| 欧美另类变人与禽xxxxx| 亚洲一级二级三级在线免费观看| 99久久精品免费| 亚洲成人动漫在线免费观看| 欧美另类久久久品| 精品无人码麻豆乱码1区2区| 国产精品网友自拍| 91激情五月电影| 奇米影视一区二区三区小说| 国产日产欧美一区二区视频| 91在线你懂得| 亚洲成av人**亚洲成av**| 51精品秘密在线观看| 高清国产一区二区三区| 一区二区免费在线播放| 日韩欧美国产一区二区三区| 成人免费va视频| 日韩av一区二区在线影视| 中文字幕 久热精品 视频在线| 色综合天天综合色综合av| 久久精品99久久久| 一区二区三区中文在线| 久久精品欧美日韩| 欧美人伦禁忌dvd放荡欲情| 国产一区二区不卡| 亚洲二区在线视频| 亚洲国产成人自拍| 日韩精品一区二区在线观看| 色噜噜狠狠一区二区三区果冻| 国产在线精品一区二区不卡了 | 国产乱人伦精品一区二区在线观看| 亚洲欧洲精品一区二区三区不卡| 欧美精品日韩精品| 色综合久久综合中文综合网| 久久99国产精品久久99果冻传媒| 一区二区三区中文在线观看| 国产精品天干天干在观线| 91国在线观看| 麻豆精品在线看| 一区二区三区毛片| 亚洲欧美一区二区在线观看| 26uuu色噜噜精品一区二区| 欧美卡1卡2卡| 欧美三级日韩三级国产三级| 成人国产电影网| 成人性视频免费网站| 国产精品18久久久久久久久| 精品中文av资源站在线观看| 午夜a成v人精品| 亚洲国产中文字幕在线视频综合| 亚洲欧美日韩电影| 亚洲视频一区二区在线观看| 亚洲人成电影网站色mp4| 国产精品无圣光一区二区| 欧美精彩视频一区二区三区| 国产欧美一区二区精品性色| 久久精品亚洲精品国产欧美| 欧美高清在线精品一区| 中文字幕一区二区在线播放| 最近中文字幕一区二区三区| 亚洲欧美另类久久久精品2019| 亚洲乱码国产乱码精品精可以看| 亚洲美女屁股眼交| 天天影视网天天综合色在线播放| 亚洲国产成人91porn| 免费欧美日韩国产三级电影| 国产在线视频不卡二| 国产成人在线视频播放| 成人av综合一区| 欧美这里有精品| 欧美刺激脚交jootjob| 国产女人18毛片水真多成人如厕| 国产精品丝袜一区| 亚洲成a人片在线不卡一二三区| 日韩中文字幕亚洲一区二区va在线| 美女脱光内衣内裤视频久久网站| 国产麻豆精品theporn| 不卡一区在线观看| 欧美日韩国产电影| 国产欧美日产一区| 亚洲人妖av一区二区| 五月综合激情网| 国产一本一道久久香蕉| 在线一区二区三区| 精品噜噜噜噜久久久久久久久试看| 国产欧美日韩视频在线观看| 亚洲影视资源网| 麻豆一区二区三| 91亚洲精品一区二区乱码| 91.com视频| 一区二区在线看| 精品一区二区久久| 91影院在线观看| 久久综合av免费| 一区二区三区免费| 国产精品乡下勾搭老头1| 欧美日韩日日夜夜| 国产精品美女一区二区在线观看| 亚洲成av人片在线观看| 懂色av一区二区三区免费看| 91精品国产综合久久香蕉麻豆 | 麻豆一区二区在线| 色婷婷国产精品综合在线观看| 精品国产一区久久| 日韩av午夜在线观看| 91同城在线观看| 久久久久久久久久美女| 亚洲va欧美va人人爽| 成人av先锋影音| 久久综合狠狠综合| 奇米888四色在线精品| 欧美日韩在线不卡| 亚洲美女少妇撒尿| 91视频xxxx| 亚洲欧洲日本在线| 成人午夜av电影| 国产欧美一区二区三区鸳鸯浴 | 伊人性伊人情综合网| a在线欧美一区| 国产免费观看久久| 国产不卡在线视频| 国产欧美一区二区三区鸳鸯浴| 国内精品国产成人| 久久先锋资源网| 国产精品综合一区二区| 337p日本欧洲亚洲大胆精品| 久久99这里只有精品| 26uuu亚洲| 成人午夜大片免费观看| 中文字幕乱码日本亚洲一区二区| 国产精品亚洲第一区在线暖暖韩国| 26uuu另类欧美亚洲曰本| 国产一区二区三区| 国产精品网站在线观看| 不卡的av中国片| 亚洲欧美另类久久久精品 | 欧美怡红院视频| 午夜精品福利在线| 91精品国产综合久久婷婷香蕉| 免费高清不卡av| 2022国产精品视频| 不卡在线视频中文字幕| 亚洲国产日韩在线一区模特| 欧美日韩不卡一区| 国产精品一区三区| 亚洲欧洲在线观看av| 欧美日韩国产综合一区二区三区| 蜜臀精品一区二区三区在线观看 | 亚洲午夜精品网| 欧美一区二区网站| 国产精品一区二区三区四区| 日本一区二区三级电影在线观看| jiyouzz国产精品久久| 亚洲免费毛片网站| 欧美一区二区视频在线观看| 国模冰冰炮一区二区| 亚洲同性gay激情无套| 欧美电影影音先锋| 成人在线综合网| 日日夜夜免费精品视频| 久久久www成人免费毛片麻豆| 99精品一区二区三区| 日韩黄色片在线观看| 中文久久乱码一区二区| 欧美在线三级电影| 国产一区在线不卡| 亚洲一区二区在线免费看| 精品久久免费看| 在线观看一区日韩| 国产成人精品免费| 男人的天堂久久精品| 亚洲精品福利视频网站| 久久综合狠狠综合| 欧美一区二视频| 色88888久久久久久影院按摩| 七七婷婷婷婷精品国产| 一区二区不卡在线视频 午夜欧美不卡在 | 在线精品视频一区二区三四| 国产在线不卡一卡二卡三卡四卡| 亚洲男人的天堂在线观看| 久久日韩粉嫩一区二区三区| 欧美性色欧美a在线播放| 成人蜜臀av电影| 国产精品自产自拍| 久久疯狂做爰流白浆xx| 亚洲成在人线免费| 亚洲欧美福利一区二区| 亚洲国产精品av| 久久久久国产精品麻豆ai换脸| 欧美精品自拍偷拍| 欧美日韩中文一区| 一本色道a无线码一区v| 成人天堂资源www在线| 国产高清一区日本| 国产一级精品在线| 国产精品系列在线观看| 国产精品自拍一区| 国产xxx精品视频大全|