2009-04-22 111 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安装程序安装应用程序,但安装程序不会编写应用程序依赖的任何注册表值。