簡體   English   中英

用C#編寫USB驅動器便攜式應用程序

[英]Writing USB Drive Portable Applications in C#

關於擁有USB閃存設備,我最喜歡的一件事就是隨身攜帶一堆有用的工具。 我想寫一些工具,並使它們在這種環境中運行良好。 我知道C#最好,而且我很有效率,所以我可以立即獲得一個Windows窗體應用程序。

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

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

2)讀/寫周期 - 在C#中,如何確保我的應用程序沒有不必要地寫入驅動器? 我是否始終控制寫入,或者是否需要考慮“隱藏寫入”?

3)開放式問題:我應該注意哪些與便攜式應用程序有關的其他問題,或者對具有良好IDE的其他語言的建議是否會使我獲得類似的生產力水平但更好的可移植性?

  • 1)從閃存驅動器運行.NET應用程序應該沒有任何問題。
  • 2)您應該控制大多數寫入。 請務必寫入硬盤驅動器上的temp或其他位置,而不是寫入閃存驅動器。 但寫周期應該不是問題 - 即使使用中等到重度,大多數閃存驅動器的使用壽命都是多年。
  • 3)就像任何具有xcopy樣式部署的應用程序一樣對待它,如果某些依賴項不在框中,則嘗試優先考慮您的應用程序失敗。

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

你應該始終控制你的寫作。 應用程序應在啟動時加載到RAM中,然后將內存分配到RAM中,因此不會將任何內容寫入閃存驅動器。

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

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

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

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

我實際上並沒有這方面的經驗,所以最好采取我所說的一撮鹽。 但這是我的看法:

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

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

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

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

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

如果你不僅僅是為了個人用途而寫東西,那么1號真的是踢球者。 顯然,在拇指驅動器上托管完整CLR的便攜式副本是不可能的。 但是有一些工具可以掃描程序集的依賴關系並將它們打包成一個獨立的.exe,這樣就不一定需要在目標系統上安裝CLR。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM