• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 64, 文章 - 11, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            進(jìn)程初探之<2> 創(chuàng)建進(jìn)程

                    今年前段時(shí)間,我原來的一個(gè)同事突然打電話給我。起因是客戶不讓開發(fā)商在服務(wù)器上安裝任何的應(yīng)用程序,只允許部署網(wǎng)站。但是,這個(gè)應(yīng)用系統(tǒng)的部份功能又用到了第三方的組件。組件肯定是要進(jìn)行安裝的,當(dāng)然這樣說也存在不對(duì)的地方,比如我可引用這個(gè)組件就像引用一個(gè)私有程序集的引用一樣,而再專門做一個(gè)適配器來做一個(gè)中轉(zhuǎn),這樣肯定也能解決問題。我想在我前段的論述中可能已經(jīng)存一定的批漏了,首先我假設(shè)了客戶知道組件的內(nèi)部實(shí)現(xiàn)這些行為了,而這一點(diǎn)就與COM要求的隱藏性相違背了。就算后一種方法能夠?qū)崿F(xiàn),這時(shí)我們就把組件退化成一個(gè)DLL也行,這樣的“退化”如在項(xiàng)目之初到也是可以的。但到了進(jìn)行交互之時(shí)要做這些的改動(dòng),肯定會(huì)對(duì)這個(gè)系統(tǒng)產(chǎn)生諸如項(xiàng)目DELAY,系統(tǒng)的改動(dòng)大也會(huì)相應(yīng)地引起系統(tǒng)的不穩(wěn)定,開發(fā)人員的重新投入,測(cè)試的重新進(jìn)行。在后期進(jìn)行這項(xiàng)工作對(duì)一個(gè)開發(fā)商來說無疑是一個(gè)噩夢(mèng)。或許有人會(huì)說這個(gè)客戶也太不講理了,但是開發(fā)商也有一定的疏忽之責(zé),如果在開發(fā)之初便已了解到這個(gè)約束那么在開發(fā)之初就可以確定許多很好的方案來解決這個(gè)問題。這時(shí)是該“糊弄”客戶的時(shí)候了,其實(shí)這種安裝組件并不會(huì)對(duì)客戶造成影響,當(dāng)然本人是說這個(gè)組件要是可信懶的,如果真的重新來修改應(yīng)用系統(tǒng)的話,可能造成系統(tǒng)不穩(wěn)定及客戶錯(cuò)過恰當(dāng)?shù)膽?yīng)用時(shí)機(jī),這樣會(huì)對(duì)客戶造成一定的損失。這是對(duì)客戶的一種“傷害”。就象我們很多人怕了吃苦藥,小孩子就更是了,有的小孩吃到苦藥就全部吐出來,這時(shí)藥廠就在這個(gè)苦藥上包上一層的糖衣。這種“欺騙”就是善意了。于是上面的問題就可以用后臺(tái)啟動(dòng)注冊(cè)進(jìn)程來完成這項(xiàng)偉大的工作。
                     WINDOWS創(chuàng)建進(jìn)程的方法有多種,我更喜歡VC編程,我這里就列舉幾種VC的進(jìn)程創(chuàng)建方法。
                     >>WinExec 這種創(chuàng)建進(jìn)程的方法是沿用原來win16系統(tǒng)下使用的方法。
                     >>ShellExecute      win32 api
                     >>ShellExecuteEx     win32 api
                     >>CreateProcess        win32 api
                    >>使用組件的進(jìn)程激活方法
                  在下面的例子中我只用上面的四種方法,組件的激活方法在這里就不敘述了。

             1// CreateProcess.cpp : Defines the entry point for the console application.
             2//
             3
             4#include "stdafx.h"
             5#include "windows.h"
             6#include "shellapi.h"
             7
             8//#pragma comment(lib,"shell32.lib")  如果在鏈接項(xiàng)中沒有設(shè)置,就在這里加上這個(gè)鏈接。
             9/*******************************************************************************
            10//   printf the help message
            11//
            12******************************************************************************/
            13
            14void Help()
            15{
            16    printf("Here are there some create process method!\n");
            17    printf("1:Use winexec.\n");
            18    printf("2:Use ShellExecute.\n");
            19    printf("3:Use ShellExecuteEx.\n");
            20    printf("4:Use CreateProcess.\n");
            21    printf("Q:Quit the application.\n");
            22}
            23int main(int argc, char* argv[])
            24{
            25    bool bQuit=false;
            26    UINT uCode=0;
            27    SHELLEXECUTEINFO Info;
            28    STARTUPINFO startInfo;
            29    PROCESS_INFORMATION pInfo;
            30    while(!bQuit)
            31    {
            32        Help();
            33        char ch=getchar();
            34        getchar();
            35        switch(ch)
            36        {
            37        case '1':
            38            uCode=WinExec("notepad.exe",SW_SHOW);
            39            break;
            40        case '2':
            41            uCode=(UINT)ShellExecute(NULL,"open","notepad.exe",NULL,NULL,SW_SHOW);
            42            break;
            43        case '3':
            44            {                
            45                memset(&Info,0,sizeof(Info));
            46                Info.cbSize=sizeof(Info);
            47                Info.lpVerb="open";
            48                Info.lpFile="notepad.exe";
            49                Info.lpParameters=NULL;
            50                Info.fMask=SEE_MASK_NOCLOSEPROCESS;
            51                Info.nShow=SW_SHOWDEFAULT;
            52                ShellExecuteEx(&Info);
            53            }
            54            break;
            55        case '4':
            56            {
            57                memset(&startInfo,0,sizeof(startInfo));
            58                startInfo.cb=sizeof(startInfo);
            59                CreateProcess(NULL,"notepad.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&startInfo,&pInfo);
            60            }
            61            break;
            62        case 'Q':
            63            bQuit=true;
            64            break;
            65        default:
            66            break;
            67        }
            68    }
            69    return 0;
            70}

                  上面的示例代碼就這么少,當(dāng)然使用起來不會(huì)象文章中這樣簡(jiǎn)單,但是關(guān)鍵的也就是這些了。對(duì)創(chuàng)建進(jìn)程就是這么簡(jiǎn)單。
                  我很喜歡玩兩個(gè)人比武的游戲,在其中我取得了很多的樂趣,給開游戲廳的老板盡了身為熱血少年的一份心,也為國(guó)家多一份稅收。我玩的角色武功套路也就只有這么幾招,招式是簡(jiǎn)單了些,但很有用,不是嗎?我經(jīng)常兩個(gè)銅牌就可以玩上一兩個(gè)時(shí)時(shí)辰。

                   

            posted on 2008-03-21 22:02 Robertxiao 閱讀(412) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows/MFC探索

            九九99精品久久久久久| 亚洲午夜久久久| 久久激情亚洲精品无码?V| 久久精品夜色噜噜亚洲A∨| 亚洲人成精品久久久久| 美女写真久久影院| 久久久久久精品免费免费自慰| 久久国产精品国产自线拍免费| 亚洲AV伊人久久青青草原| 久久国产精品久久| 伊人久久综合精品无码AV专区| 国产精品狼人久久久久影院| 久久久久久久久久久久中文字幕| 亚洲欧美日韩久久精品 | 亚洲精品乱码久久久久久不卡| AAA级久久久精品无码片| 色天使久久综合网天天| 久久久久97国产精华液好用吗| 国产成人精品久久二区二区| 亚洲国产精品一区二区久久hs| 久久久久亚洲av毛片大| AAA级久久久精品无码区| 久久精品嫩草影院| 国产精品久久自在自线观看| 久久久久亚洲精品天堂| 亚洲欧美日韩久久精品第一区| 国产精品久久新婚兰兰| 色妞色综合久久夜夜| 久久精品日日躁夜夜躁欧美| 精品国产乱码久久久久久人妻| 久久人人爽人人人人爽AV| 尹人香蕉久久99天天拍| 伊人久久无码精品中文字幕| 欧美一区二区久久精品| 亚洲成色www久久网站夜月| 思思久久好好热精品国产| 久久这里的只有是精品23| 狠狠色综合网站久久久久久久高清| 久久精品亚洲AV久久久无码| 久久人人爽爽爽人久久久| 狠狠色丁香婷婷综合久久来|