我想知道如果有人能指出我在正確的方向。例如,你知道在大多數IDE中,如果你使用「open with」打開源文件,它會運行程序並打開它?然後如果你打開另一個,它會在同一個進程中的新選項卡中打開它?程序如何處理「打開...」文件?
我的問題不是如何將程序添加到shell命令,而是:
如何將C#應用程序「接收」例如PDF文件?
當另一個文件與它一起運行時(無需程序的實例),應用程序如何在同一進程中打開該文件?
我想知道如果有人能指出我在正確的方向。例如,你知道在大多數IDE中,如果你使用「open with」打開源文件,它會運行程序並打開它?然後如果你打開另一個,它會在同一個進程中的新選項卡中打開它?程序如何處理「打開...」文件?
我的問題不是如何將程序添加到shell命令,而是:
如何將C#應用程序「接收」例如PDF文件?
當另一個文件與它一起運行時(無需程序的實例),應用程序如何在同一進程中打開該文件?
當第二個程序實例啓動時,加載任何界面組件之前,檢查是否另一個程序實例已在運行。如果是這樣,它以某種方式(程序特定的:這可以是套接字,進程間中斷,共享內存等)與它通信它應該打開這個新文件。
將此信息傳達給第一個實例後,第二個程序實例將只是終止,因爲它不再需要。
你的程序必須能夠與其他自己的實例交談,並說「嗨,我已經打開了,你想做什麼,讓我爲你做。」
這種關係通常是另一種方式:「嘿,是否有人已經開放?你能爲我做這個嗎?」 – 2010-04-13 21:49:15
夠公平的:-) – Nate 2010-04-14 04:34:36
這裏是一個很好的詳細介紹後,解釋正確執行:
http://www.iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx
這個線程包含處理命令行參數的討論和樣品(這是多麼文件「傳遞給」你的應用程序):http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic62109.aspx
Microsoft程序通常在shell配置中有一個ddeexec鍵;這會導致shell向已存在的應用程序發送一個DDE命令。
DDE已棄用。 – SLaks 2010-04-13 22:01:18
也許如此,但我注意到Office 2007仍在使用它。我認爲這篇博文最後的評論總結得很好:http://blogs.msdn.com/oldnewthing/archive/2008/07/30/8790272.aspx – 2010-04-13 22:42:37
非常真實。並補充問題1的答案:文件名作爲參數添加到程序的新實例中,如「C:\ WINDOWS \ notepad.exe C:\ myfile.txt」中所示。在你的程序中,讀取參數字符串以獲取文件名。 – 2010-04-13 22:06:48
感謝您的補充。我完全錯過了這部分問題! – 2010-04-13 22:09:31