用C#编写USB驱动器便携式应用程序

关于拥有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安装程序安装应用程序,但安装程序不会写入应用程序所依赖的任何注册表值。

我真的没有#1或#3的答案。 但对于#2,.NET CLR不应该写入应用程序的“安装”文件夹(即闪存驱动器),除非您的代码专门告诉它或正在使用和修改基于文件的设置(ini,xml等)与应用程序一起生活。

如果您不仅仅是为了个人用途而写东西,那么1号真的是踢球者。 显然,在拇指驱动器上托管完整CLR的便携式副本是不可能的。 但是有一些工具可以扫描程序集的依赖关系并将它们打包成一个独立的.exe,这样就不一定需要在目标系统上安装CLR。

我实际上并没有任何经验,所以最好采取我所说的一小撮盐。 但这是我的看法:

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

关于如何以及何时对驱动器进行写入,这并不是应用程序开发人员的考虑因素,这是操作系统可以更好地控制的。 我知道Windows缓存写入USB驱动器,所以我相信它会处理它。

您唯一需要考虑的是不会安装您的应用程序。 因此,您需要确保将其设计为完全自包含在其部署目录中。 您也可以选择对用户主目录进行一些写入,但这需要通过适当的环境变量来完成。

我会写,看看操作系统无法处理的闪存驱动器有什么特别之处。