查看積分策略說明發表回覆
Discuz! 代碼
提示插入
直接插入
說明訊息

插入粗體文本 插入斜體文本 插入下劃線 置中對齊 插入超級連結 插入信件位址 插入圖像 插入 flash 插入代碼 插入引言 插入列表
刪除線 直線分隔線 虛線分隔線
    
添加文字底框
內容 [字數檢查]:

表情符號

更多 Smilies
字型大小 |||
溫馨提示:本區開放遊客瀏覽。


文章關鍵字 : [功能說明]
(關鍵字可加強搜索準確性, 如關鍵字多於一組, 請以 , 作分隔, e.g. : 阿笨,shiuh,第一笨)

 關閉 URL 識別 | html 禁用
 關閉 表情符號 | 表情符號 可用
 關閉 Discuz! 代碼 | Discuz! 代碼 可用
使用個人簽名
接收新回覆信件通知
推薦放檔網絡空間

檔案(Torent, zip等)
  1. freedl
  2. multiupload
  3. btghost
  4. 便當狗
  5. mediafire
  6. pillowangel
圖片(JPG, GIF等)
  1. hotimg
  2. tinypic
  3. mousems2
  4. imageshack
  5. imm.io
>>>歡迎推薦好用空間


最新10篇文章回顧
Acute

 發表於 2005-2-4 08:51 AM

以前寫程式, 要確認自己的程式是不是執行過, 使用的方法是:
FindWindow (ClassName, WindowName);
其中WindowName 通常給NULL, 因為多數程式WindowName 是變動的
後來大家盡量不這麼用, 就是因為僅僅一個名字決定一切, 萬一名字相同, 就造成程式不執行
最簡單的case, 今天寫病毒的人無聊, 把知名軟體的ClassName 都拿來亂玩一通
結果將造成知名軟體全部不能執行
採用CreateMutex也是一樣, 如果僅僅靠名字就決定一切, 那跟使用FindWindow 沒有任何兩樣
大型軟體公司, 如果要把程式寫的粉愚蠢, 當然沒有人禁止, 不過, 將會有接不完的客服電話

Acute.


musicsun

 發表於 2005-2-2 08:06 PM


引用:
Acute寫到:
寫程式都會有保險機制的, 不會寫的很愚蠢
所以, CreateMutex 成功之後, 會去檢查, 是不是自己的另一個instance 開啟的
如果是, 才會不執行, 如果不是, 就會執行
那因為已經被"假"程式先佔據了, 所以每個instance 起來都發現不是
所以, 每個instance 都會執行

Acute.


請問一下...
像這樣寫有什麼問題嗎?
為什麼還要檢查是不是自己的另一個instance 開啟的

        if (hMutex = CreateMutex(NULL, FALSE, _T("E66CB96D-D0BF-4b9a-BDD4-55587785C730")))
        {
                if (GetLastError() == ERROR_ALREADY_EXISTS)
                {
                        AfxMessageBox(_T("App running"), MB_ICONSTOP|MB_OK);
                        return TRUE;
                }
        }


Acute

 發表於 2005-2-2 04:50 PM


引用:
musicsun寫到:

引用:
Acute寫到:
這種需求, 要變成通用程式粉麻煩, 但是, 要針對特定程式, 其實很簡單
so, 如果你會寫程式, 也知道怎樣使用debugger 環境, 我可以告訴你方法
1. 先trace 程式, 找出該程式何時執行CreateMutex, 這時候, 查出該function 第三個參數 (一個名字)
2. 自己寫一個程式, 裏面啥都不幹, 就是去CreateMutex 然後用同樣的名字參數

以後, 只要先執行你自己寫的程式, 再執行你希望可以跑多個的程式, 就可以了.

這個方法, 對80% 的軟體會有效
會無效的, 只有遇到使用傳統方法辨識的, 但是, 大型軟體公司的程式不會用傳統笨方法, 因為那樣子容易誤判

^^" 當初eDonkeySpy 破驢子不給跑多隻, 就是用這個方法

Acute.


要執行程式設定的mutex名字已經被自己寫的程式開啟了...
這樣要執行的程式不就看到名字已經有了...
然後一隻都不跑嗎?


寫程式都會有保險機制的, 不會寫的很愚蠢
所以, CreateMutex 成功之後, 會去檢查, 是不是自己的另一個instance 開啟的
如果是, 才會不執行, 如果不是, 就會執行
那因為已經被"假"程式先佔據了, 所以每個instance 起來都發現不是
所以, 每個instance 都會執行

Acute.


musicsun

 發表於 2005-2-2 02:00 PM


引用:
Acute寫到:
這種需求, 要變成通用程式粉麻煩, 但是, 要針對特定程式, 其實很簡單
so, 如果你會寫程式, 也知道怎樣使用debugger 環境, 我可以告訴你方法
1. 先trace 程式, 找出該程式何時執行CreateMutex, 這時候, 查出該function 第三個參數 (一個名字)
2. 自己寫一個程式, 裏面啥都不幹, 就是去CreateMutex 然後用同樣的名字參數

以後, 只要先執行你自己寫的程式, 再執行你希望可以跑多個的程式, 就可以了.

這個方法, 對80% 的軟體會有效
會無效的, 只有遇到使用傳統方法辨識的, 但是, 大型軟體公司的程式不會用傳統笨方法, 因為那樣子容易誤判

^^" 當初eDonkeySpy 破驢子不給跑多隻, 就是用這個方法

Acute.


要執行程式設定的mutex名字已經被自己寫的程式開啟了...
這樣要執行的程式不就看到名字已經有了...
然後一隻都不跑嗎?


Acute

 發表於 2005-1-31 03:39 AM

這種需求, 要變成通用程式粉麻煩, 但是, 要針對特定程式, 其實很簡單
so, 如果你會寫程式, 也知道怎樣使用debugger 環境, 我可以告訴你方法
1. 先trace 程式, 找出該程式何時執行CreateMutex, 這時候, 查出該function 第三個參數 (一個名字)
2. 自己寫一個程式, 裏面啥都不幹, 就是去CreateMutex 然後用同樣的名字參數

以後, 只要先執行你自己寫的程式, 再執行你希望可以跑多個的程式, 就可以了.

這個方法, 對80% 的軟體會有效
會無效的, 只有遇到使用傳統方法辨識的, 但是, 大型軟體公司的程式不會用傳統笨方法, 因為那樣子容易誤判

^^" 當初eDonkeySpy 破驢子不給跑多隻, 就是用這個方法

Acute.


chaeung

 發表於 2005-1-30 09:51 PM

個人獨斷的偏見:

這類影像軟體跑起來極吃資源, 大部份都設計成"避免多重執行", 即一執行就檢查是否已佔用記憶體執行中.
真要同時執行兩個... 多買台電腦來跑比較確切可行...
這也是目前的迷思, 砸錢買夢幻配備, 效能未必倍增, 出狀況就整台停擺, 現在更趨向於效能足夠即可, 寧願分工用多台電腦分別執行厚重的工作, 成本降低效率提高又不怕其中一兩台出狀況.

以上


Outbreak

 發表於 2005-1-30 02:20 PM

有些軟體會設定成只能執行一個Instance
所以沒辦法再同一時間執行兩個囉
這要看軟體而定
VMWare和Virtual PC是虛擬機器的概念
這樣開兩個PhotoImpact應該也沒多大的意義以及效能
以上老衲拙見


brodigit

 發表於 2005-1-30 01:31 PM

OS平台: Windows 2000 Professional
問題是:
想要在一個OS底下. 開啟同樣的兩個AP.造成一種AP. 多個開啟的效果.
例如PhotoImpact. 一般在開啟一個之後. 即使再去點photoimpact的執行檔.
系統也不會再多開第二個Photoimpact.

請教..
有沒有軟體可以協助達到以上的功能?
Vmware太大之了(真的不行的話...我再試這個好了)
Xdesk不管用....
還有什麼呢?

求助喔~~  





所在時區為 GMT+8, 現在時間是 2024-11-28 04:31 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.016460 second(s), 6 queries , Qzip disabled