婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > .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服務的實例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产麻豆91精品| 视频一区中文字幕国产| 国产精品色在线| 激情成人综合网| 91麻豆精品国产自产在线| 亚洲区小说区图片区qvod| 91在线看国产| 亚洲午夜视频在线观看| 欧美精品三级日韩久久| 麻豆91在线看| 中文字幕亚洲一区二区va在线| 国产呦精品一区二区三区网站| 欧美精彩视频一区二区三区| 久久精品国产免费看久久精品| 538prom精品视频线放| 亚洲成va人在线观看| 6080国产精品一区二区| 免费成人结看片| 久久九九99视频| 欧美日韩一区在线观看| 亚洲最新在线观看| 精品蜜桃在线看| 欧美在线一区二区| 99精品久久只有精品| 美女视频一区在线观看| 亚洲欧美色综合| 国产日韩欧美精品一区| 91精品国产91综合久久蜜臀| 岛国av在线一区| 日韩一区精品字幕| 亚洲一区二区三区四区在线| 国产精品不卡一区二区三区| 亚洲精品在线电影| 日韩无一区二区| 91精品国产91久久久久久一区二区 | www.欧美色图| 亚洲第一激情av| 日韩理论片在线| 国产精品乱码一区二区三区软件 | 久久精品99久久久| 偷拍一区二区三区| 五月天亚洲精品| 午夜视频在线观看一区二区| 天天综合网天天综合色| 麻豆一区二区三| 激情六月婷婷久久| 国产成人av电影在线观看| 国产精品一线二线三线精华| 紧缚奴在线一区二区三区| 国产激情一区二区三区| 欧美高清性hdvideosex| 国产成人精品免费| 7777精品伊人久久久大香线蕉超级流畅| 亚洲欧美一区二区三区久本道91| 国产麻豆视频一区| 亚洲一二三四区| 在线电影院国产精品| 国产人成一区二区三区影院| 日韩精品欧美精品| 一区二区三区精品| 天天色 色综合| 欧美在线观看禁18| 精品国产污污免费网站入口 | 97超碰欧美中文字幕| 在线电影欧美成精品| 精品一区二区综合| 国产成人午夜视频| 欧美一区二区三区不卡| 91亚洲精品久久久蜜桃| 91精品一区二区三区久久久久久| 久久久精品国产99久久精品芒果| 亚洲国产精品久久人人爱| 国产成人免费在线| 7777精品伊人久久久大香线蕉的| 国产精品欧美一区二区三区| 欧美日精品一区视频| 欧美xxxx在线观看| 日韩激情在线观看| 日韩一区二区在线看| 欧美肥妇free| 欧美男同性恋视频网站| aaa国产一区| 91精品国产91久久久久久一区二区| 国产精品免费av| 国产精品一区二区久久精品爱涩 | 亚洲精品视频在线观看免费| 成人福利电影精品一区二区在线观看 | 国产日产欧美一区二区视频| 欧美色手机在线观看| 国产不卡视频在线播放| 国产精品私人影院| 色婷婷av一区二区三区大白胸 | 亚洲第一在线综合网站| 欧美制服丝袜第一页| 国产精品二区一区二区aⅴ污介绍| www欧美成人18+| 国产嫩草影院久久久久| 有坂深雪av一区二区精品| 欧美三级韩国三级日本一级| 日韩福利视频网| 久久久久久亚洲综合影院红桃| 国内精品久久久久影院色| 久久久久久免费| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲色图欧美偷拍| 欧美成人三级在线| 欧美日韩一二区| www.欧美.com| 成人免费看视频| 日本欧美一区二区三区乱码| 久久久精品黄色| 91麻豆精品国产91久久久久| 国产电影精品久久禁18| 亚洲一区二区成人在线观看| 91精品欧美一区二区三区综合在| 成人性色生活片| 天天综合网 天天综合色| 国产无人区一区二区三区| 日韩欧美高清一区| 欧美喷水一区二区| 欧美电视剧免费观看| 欧美日产国产精品| 欧美高清视频不卡网| 欧美日韩视频专区在线播放| 在线视频观看一区| 欧美在线视频全部完| 国产精品妹子av| 久久er99热精品一区二区| 亚洲国产成人av网| 秋霞av亚洲一区二区三| 国产一区二区不卡| 欧美在线色视频| 国产婷婷一区二区| 首页欧美精品中文字幕| 国产福利91精品一区二区三区| 99国产精品视频免费观看| 久久综合一区二区| 亚洲高清一区二区三区| 色综合天天在线| 99久久精品免费看| 日韩欧美一二三区| 亚洲影视在线播放| 精品在线免费视频| 成人av资源站| 日韩一区国产二区欧美三区| 久久新电视剧免费观看| 日日摸夜夜添夜夜添精品视频| 97精品久久久午夜一区二区三区| 欧美精品免费视频| 一区二区三区在线观看国产| 亚洲午夜免费福利视频| 精品一区二区三区久久| 一本一本大道香蕉久在线精品| 精品国精品国产尤物美女| 亚洲一本大道在线| 99视频超级精品| 欧美一区二区三区四区视频| 一区二区三区波多野结衣在线观看 | 免费成人在线视频观看| 在线不卡的av| 午夜国产不卡在线观看视频| 色婷婷久久久综合中文字幕| 精品福利一区二区三区| 日本一区中文字幕| 国产亚洲1区2区3区| 美日韩黄色大片| 久久久久久久久岛国免费| 成人美女视频在线观看| 午夜亚洲国产au精品一区二区| 欧美视频在线观看一区二区| 蜜臀av一区二区在线免费观看| 亚洲视频 欧洲视频| 日韩欧美亚洲国产另类| 亚洲一区在线播放| 99久久婷婷国产综合精品| 一区二区三区在线看| xfplay精品久久| 久久综合精品国产一区二区三区 | 在线免费观看不卡av| 欧美成va人片在线观看| 91免费观看国产| 国产乱码精品一区二区三区五月婷| 久久久久国产精品厨房| 国产伦精一区二区三区| 中文字幕一区二区三区在线播放| 九色|91porny| 日本一区二区三区四区| 亚洲一区二区三区四区在线| 日韩国产在线观看一区| 亚洲精品视频免费看| 日韩欧美在线影院| 欧美日韩一卡二卡三卡| 国产乱子轮精品视频| 狠狠色伊人亚洲综合成人| 中文在线一区二区| 中文字幕一区二区三区av| 日韩在线卡一卡二| 国产河南妇女毛片精品久久久| 国产一区三区三区| 欧美一区二区三区免费大片|