2023-08-28 10:23:48來源:今日頭條
【資料圖】
最近有人問我下面這個問題,我們依然可以使用之前我提到的 “思維調(diào)試” 來研究研究。
我們碰到了一個技術(shù)問題。當在資源管理器中雙擊打開文檔時,資源管理器不會啟動我們的應(yīng)用程序。更加奇怪的是,如果我們將一個調(diào)試器掛接到資源管理器進程,并在 kernel32 模塊的 CreateProcessW 處下斷點,然后等待 CreateProcess 返回,并在調(diào)試器中繼續(xù)執(zhí)行,則文檔可以正常打開。但是,如果我們不做任何等待,應(yīng)用程序也可以正常打開,但是它不會加載文檔,在這種情況下,我們得到了這樣的錯誤信息:Windows 找不到 ‘a(chǎn)bc.lit’。請確保你輸入了正確的文檔名稱,然后重試。下面是我們使用的命令行:“F:\Program Files\LitSoft\LitWare\LitWare.exe” /dde到底是哪里出了問題呢?
如果你仔細研究過 DDE 初始化的工作原理文章,那么我想你應(yīng)該已經(jīng)知道原因了。
回想一下,通過 DDE 打開文檔是通過首先查找 DDE 服務(wù)器來完成的,如果未找到,則手動啟動服務(wù)器并重試。上面的命令行顯然已注冊為與 ddeexec 關(guān)聯(lián)的命令。我們有兩個線索:首先是文檔名稱本身在命令行上不存在。(這不可能是直接執(zhí)行,因為程序不知道它應(yīng)該打開什么文檔!但是這條線索是命令行上的短語 /dde。
顯然,資源管理器嘗試第二個 DDE 對話打開文檔時出現(xiàn)問題。讓資源管理器等待幾秒鐘可以解決問題的事實使原因顯而易見:DDE 服務(wù)器初始化和偵聽自身的速度很慢。資源管理器啟動服務(wù)器并嘗試與其通信,但服務(wù)器尚未準備就緒,因此不響應(yīng) DDE 啟動。
如何解決這個問題?
外殼程序假定 DDE 服務(wù)器在輸入空閑時已準備好接受連接。一旦 DDE 服務(wù)器上的 WaitForInputIdle 返回,資源管理器將第二次嘗試啟動 DDE 會話。此修復(fù)程序是讓應(yīng)用程序在開始處理消息之前啟動并運行其 DDE 服務(wù)器。我的猜測是應(yīng)用程序?qū)⑵?DDE 服務(wù)器移動到后臺線程以提高啟動性能,因為 DDE 服務(wù)器不參與正常的程序操作。但是這太糟糕了,當傳遞 /dde 標志時,程序忘記在輸入空閑之前啟動并運行 DDE 服務(wù)器。讓 DDE 服務(wù)器運行很重要,但它錯過了正確的時間點。
總結(jié)如果你要實現(xiàn)了一個 DDE 服務(wù)器,請確保在主線程開始處理消息之前就啟動它。否則,應(yīng)用程序啟動和嘗試與之通信的外殼之間存在競爭條件。
關(guān)鍵詞:
最近有人問我下面這個問題,我們依然可以使用之前我提到的“思維調(diào)試”
前言大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘
前言4G的機器上申請8G的內(nèi)存,是否可以成功?這個問題沒有辦法,是沒有
VisualStudioCode是一款功能強大、可擴展且輕量級的代碼編輯器,經(jīng)過多
數(shù)據(jù)寶統(tǒng)計,截至8月25日收盤,滬深兩市共有59只個股連續(xù)5日或5日以上
河北遵化:精心準備迎開學
北京時間8月28日西甲聯(lián)賽第3輪,畢爾巴鄂競技主場對陣皇家貝蒂斯。畢爾
您好,現(xiàn)在漢格來為大家解答以上的問題。少年的繁體字圖片,少年的繁體
我是小前,我來為大家解答以上問題。diy小屋怎么自己制作房間,diy小屋
東方網(wǎng)記者包永婷8月27日報道:8月27日,上海大劇院迎來開業(yè)25周年。由
很多人對倒錯的歸結(jié)密室溺亡,倒錯的歸結(jié)不是很了解那具體是什么情況呢
C視覺攝影師周琦登臨龍泉山,猶如站在成都這座山水立體城市的觀景臺。
英國建議G7邀請中國參會,日本氣得直跳腳,六國獲中方同意入群,美國,中
大家好,今日關(guān)于【越吃越瘦的蔬菜7個讓人發(fā)胖的飲食習慣】迅速上了的
邯鄲小孩子好玩的地方有很多哦!首先,你可以去邯鄲的游樂園玩耍。那里