2009-04-22 84 views
7

擁有USB閃存存儲設備我最喜歡的事情之一就是隨身攜帶一堆有用的工具。我想寫一些工具,並使它們在這種環境中很好地工作。我知道C#最好,而且我的工作效率很高,所以我可以很快獲得一個Windows窗體應用程序。用C寫入USB驅動器的便攜式應用程序#

但是在製作便攜式應用程序時應考慮哪些因素?我可以想到的一些,但不知道的答案:

1)語言可移植性 - 好吧,我知道任何我使用它的機器都需要安裝.NET運行時。但是,由於我只經常使用幾臺Windows機器,這應該不成問題。我可以使用另一種語言來編寫代碼,但後來我失去了生產力,尤其是對於一個簡單的表單設計師。從閃存驅動器運行.NET應用程序還有其他問題嗎?

2)讀寫週期 - 在C#中,如何確保我的應用程序不會不必要地寫入驅動器?我是否總是能夠控制寫入,或者是否有我需要考慮的「隱藏寫入」? 3)未解決的問題:是否還有其他與便攜式應用程序有關的問題,我應該注意,或者對其他語言的建議,使用良好的IDE可以使我的生產力達到類似水平,但可移植性更好?

回答

10
  • 1)從flash 驅動器運行.NET應用程序不應該有任何問題 。
  • 2)您應該可以控制大多數寫操作的 。請務必寫入 溫度或 硬盤上的其他位置,而不是閃存 驅動器上。但寫週期不應該是 的一個問題 - 即使是中等到重的使用大多數閃存驅動器的壽命是 年。
  • 3)只把它 喜歡的它擁有XCOPY 風格的部署,並試圖解釋 爲您的應用程序正常失敗,如果 一些依賴是不是包裝盒上的任何應用程序。
0

我實際上沒有任何經驗,所以最好是拿一點鹽來說。但這是我的承諾:

你不需要做任何特別的事情。

這對於應用程序開發人員來說並不是真正考慮如何以及何時寫入驅動器,這是由操作系統更好地控制的。我知道Windows緩存寫入USB驅動器,所以我相信它會處理該問題。

您需要考慮的唯一事情是您的應用程序將不會被安裝。因此,您需要確保將其設計爲完全自行包含在部署到其中的目錄中。您也可以選擇對用戶主目錄進行一些寫操作,但這需要通過適當的環境變量來完成。

我會寫,看看是否有什麼特別的閃存驅動器,操作系統不處理。

+0

如果驅動器針對快速移除進行了優化,並且大多數閃存驅動器都是,則Windows將通過寫入而不緩存。 – Michael 2009-04-22 16:42:54

0

我真的沒有#1或#3的答案。但對於#2,.NET CLR不應該寫入應用程序的「安裝」文件夾(即閃存驅動器),除非您的代碼專門告訴它或正在使用和修改基於文件的設置(ini,xml等)與應用程序一起生活。

如果你不只是寫東西供個人使用,那麼數字1真的是最好的選擇。很顯然,將拇指驅動器上的完整CLR的便攜副本託管是不可能的。但有些工具可以掃描程序集的依賴關係,並將它們打包爲獨立的.exe文件,以便CLR不一定需要安裝在目標系統上。

2

如果您想使用com對象,請使用reg-free com並將com對象包含在您的程序中。

2

您應該始終控制您的寫入。應用程序應該在啓動時加載到RAM中,然後通過內存分配到RAM中,因此沒有任何內容寫入閃存驅動器。

對於便攜式應用程序而言,最重要的是基本上不需要爲您的應用程序進行安裝。您不希望依賴於註冊表值,特別是,因爲您的應用程序不會在其他計算機上「安裝」。

您可能會考慮的便攜式應用程序的問題之一是數據持久性。一般情況下,您可以寫入用戶的Application Data文件夾以保存數據。如果是這種情況,則保存的任何數據將僅適用於該計算機上的用戶。如果您需要一些本地應用程序數據,您可能希望爲您的設置創建一個Seralized XML文件,並將其存儲在本地應用程序的目錄中。這個文件寫作可能是你需要擔心的唯一寫操作。

爲了您的.NET可移植性問題,您還可以使用C++編寫一個小型入門程序,該程序檢查計算機是否安裝了.NET。 .NET有註冊表值,您可以查看安裝的版本,因此如果安裝了.NET,請運行您的應用程序,否則會顯示一條消息,指出需要首先安裝.NET。

編輯:我想補充一點,我在C#3.0中使用XAML爲超聲波機器做了應用程序開發。我寫的應用程序完全可以從USB閃存驅動器中完美工作,而所有用戶設置都存儲在本地AppData基礎上,因此沒有任何內容寫入USB。雖然可以通過.exe安裝程序安裝應用程序,但安裝程序不會編寫應用程序依賴的任何註冊表值。