Написание портативных USB-накопителей в C # - PullRequest
7 голосов
/ 22 апреля 2009

Одна из моих любимых вещей, связанных с владением USB-накопителем, - это таскать с собой кучу полезных инструментов. Я хотел бы написать некоторые инструменты и заставить их хорошо работать в такой среде. Я знаю C # лучше всех, и я продуктивен в этом, поэтому я мог быстро запустить приложение Windows Form.

Но какие соображения я должен учитывать при создании портативного приложения? Несколько я могу придумать, но не знаю ответов:

1) Переносимость языка - хорошо, я знаю, что на любой машине, на которой я его использую, потребуется установить среду выполнения .NET. Но так как я регулярно использую только несколько машин с Windows, это не должно быть проблемой. Я мог бы использовать другой язык для его кодирования, но тогда я потерял производительность, особенно в том, что касается простого дизайнера форм. Есть ли другие проблемы с запуском приложения .NET с флешки?

2) Циклы чтения / записи - как в C # убедиться, что мое приложение не выполняет ненужную запись на диск? Всегда ли я контролирую записи или есть какие-либо «скрытые записи», которые мне нужно учитывать?

3) Открытый вопрос: есть ли другие проблемы, связанные с переносимыми приложениями, о которых я должен знать, или, возможно, предложения для других языков с хорошими IDE, которые позволили бы мне достичь такого же уровня производительности, но лучшей переносимости?

Ответы [ 5 ]

10 голосов
/ 22 апреля 2009
  • 1) Проблем быть не должно запуск приложения .NET с флешки диск.
  • 2) Вы должны контролировать большинство пишет. Обязательно пишите Temp или другое место на жесткий диск, а не на флэш привод. Но циклы записи не должны быть проблема - даже с умеренной до тяжелой Использование большинства флэш-накопителей имеют жизнь время лет.
  • 3) Просто относись к этому как это любое приложение, которое имеет xcopy стиль развертывания и попробуйте для вашего приложения изящно проваливается какая-то зависимость не от коробки.
2 голосов
/ 22 апреля 2009

Вы всегда должны контролировать свои записи. При загрузке приложения должны загружаться в ОЗУ, а затем память, которая выделяется в ОЗУ, поэтому на флэш-накопитель ничего не записывается.

Самая важная вещь для портативного приложения заключается в том, что для вашего приложения не требуется никакой установки. Вы не хотите особенно зависеть от параметров реестра, поскольку ваше приложение не будет «установлено» на других компьютерах.

Одной из проблем переносимых приложений, которую вы можете рассмотреть, является сохранение данных. Обычно вы пишете в папку Application Data пользователя для сохранения данных. В этом случае любые сохраненные данные будут применяться только к пользователю на этом компьютере. Если вам нужны локальные данные приложения, вы можете создать Seralized XML-файл для ваших настроек и сохранить его локально в каталоге вашего приложения. В этом случае запись в файл, вероятно, будет единственным действием при записи, о котором вам нужно беспокоиться.

Для решения проблемы переносимости .NET вы также можете написать небольшую программу ввода на C ++, которая проверяет, установлен ли на компьютере .NET. .NET имеет значения реестра, которые вы можете проверить, чтобы увидеть установленные версии, поэтому, если .NET установлен, запустите ваше приложение, иначе выведите сообщение о том, что .NET необходимо установить в первую очередь.

Редактировать: Я хотел бы добавить, что я занимаюсь разработкой приложений для ультразвуковых машин с использованием XAML в C # 3.0. Приложение, которое я пишу, прекрасно работает с флэш-накопителя USB, в то время как все пользовательские настройки хранятся в локальной базе данных AppData, поэтому на USB ничего не записывается. Хотя приложение можно установить с помощью установщика .exe, установщик не записывает никаких значений реестра, от которых зависит приложение.

2 голосов
/ 22 апреля 2009

Если вы хотите использовать com-объекты, используйте reg-free com и включите com-объекты в вашу программу.

0 голосов
/ 22 апреля 2009

У меня нет ответов на вопрос № 1 или № 3. Но для # 2 .NET CLR не следует записывать в папку «установки» приложения (т. Е. На флэш-диск), если ваш код специально не сообщает или не использует и не изменяет настройки на основе файлов (ini, xml и т. Д.) которые живут с приложением.

Номер 1 действительно кикер, если вы не просто пишете вещи для личного пользования. Очевидно, что размещение переносной копии полной CLR на флэш-накопителе невозможно. Но есть инструменты, которые могут сканировать вашу сборку на предмет ее зависимостей и упаковать их в автономный .exe-файл, так что CLR не обязательно устанавливать в целевой системе.

0 голосов
/ 22 апреля 2009

У меня на самом деле нет никакого опыта с этим, так что может быть лучше взять то, что я говорю, с щепоткой соли. Но вот мое мнение:

Вам не нужно делать ничего особенного.

На самом деле разработчик приложения не учитывает, как и когда производятся записи на диск, это то, что гораздо лучше контролируется ОС. Я знаю, что кеши Windows записывают на USB-накопители, поэтому я уверен, что они справятся с этим.

Единственное, что вам нужно учитывать, это то, что ваше приложение не будет установлено. Поэтому вам необходимо убедиться, что вы спроектировали его так, чтобы он полностью работал в каталоге, в котором он развернут. При желании вы также можете сделать некоторые записи в домашний каталог пользователей, но это необходимо сделать с помощью соответствующих переменных среды.

Я хотел бы написать и посмотреть, есть ли что-то особенное в флеш-накопителе, с которым ОС не справляется.

...