Как я могу создать приложение .Net, которое распространяется как отдельный и автономный файл/объект (без установщика)?

В настоящее время у меня есть «приложение» VBScript для поддержки, которое нужно отправить клиентам для запуска, а затем клиент отправляет обратно HTML-файл с результатами. Для сравнения, выходные данные аналогичны Syscomp.exe из Absolute Dynamics за исключением того, что мой файл представляет собой один файл .vbs, и в нем нет функции «сравнения».

Проблема: требования к этому инструменту поддержки постоянно меняются, а его масштаб/цель расширяются — слишком велики, как мне кажется, для того, чтобы VBScript больше был подходящим инструментом. В идеале мой новый инструмент должен иметь механизм настройки. Например, вместо того, чтобы жестко кодировать все требования/что искать, может быть файл конфигурации, такой как App.config, или, что еще лучше, файл XML с моей собственной схемой разметки, который может быть поставляется как часть приложения на основе потребностей каждого клиента. Примечание. Я требую «без установки», потому что это будет постоянно меняться, а установщик сделает его гораздо менее гибким; мы не собираемся просить клиентов устанавливать каждый раз, когда рассылаем это.

желаемое решение: мне нужно перейти на платформу более общего назначения. .Net идеален, потому что мы уже являемся магазином .Net. Хотя, если с .Net я не могу придумать решение для распространения таким же образом, как я уже делаю это с текущим VBScript (единая сущность), тогда я рассмотрю другие платформы программирования общего назначения, если они будут упомянуты.

Что я пробовал:

  • DotNetZip, благодаря помощи Cheeso по этому вопросу SO: Запуск файла . Net из сжатого ZIP-файла. Я смог использовать это для отправки .Net EXE с поддерживающими DLL и App.config, упакованными в самораспаковывающийся ZIP-файл. К сожалению, это не работает в Windows XP, если я что-то не упустил. РЕДАКТИРОВАТЬ: подтверждено, что это ограничение Windows XP и Windows Vista, а не DotNetZip. Мне нужно, чтобы мое решение работало на XP (многие клиенты имеют XP или фермы Windows 2003 Server)

  • 7Zip — не соответствует моим потребностям, потому что я не могу добавить .config в архив .7z после того, как «создал» свое решение. Я смог добавить файлы в SFX, созданные в DotNetZip, просто переименовав его в «.zip», добавив новый .config, а затем удалив расширение .zip.

  • NBox не будет работать, поскольку упаковка любого файла конфигурации (например, app.config) должна быть частью мой процесс сборки. Мне нужна конфигурация, которую я могу просто «вставить» после/вне процесса сборки в любой момент и сделать ее частью конечного продукта, который будет отправлен.

  • Мастер Zip для Coffee Cup не имеет способа распаковать файлы без вмешательства пользователя. Также не позволяет запускать EXE после распаковки

  • Zip-установщик от NirSoft. Не соответствует моим требованиям, потому что он по-прежнему предлагает конечному пользователю, где установить файлы.

  • ZIP 2 Secure EXE. К сожалению, это тоже не получилось, хотя я не могу вспомнить, в чем был недостаток

  • NAR. это не сработало, потому что для этого требуется установка. Кроме этого, это, вероятно, сработало бы.

вопросы:

  • Возможно ли это, учитывая мои требования? Если да, то с чего мне начать, например. со сторонним, таким как упомянутый выше, или, может быть, тот, который я пропустил?
  • Кто-нибудь сталкивался с похожей ситуацией, в которой я нахожусь, но выбрал другой маршрут, отличный от одного приложения файла/сущности, и хотел бы поделиться?

Требования:

  • должен быть единым объектом (например, EXE или ZIP)
  • должен поддерживать хотя бы один файл конфигурации, поддерживающие библиотеки DLL и т. д. «Надежное» приложение. Редактировать: например, после сборки моего кода его можно заархивировать как самораспаковывающийся ZIP. Любой может «настроить» его с помощью конфигурации XML, затем переименовать .exe в .zip, добавить свою конфигурацию и отправить ее.
  • Должен работать в XP и вперед. Изменить: мы предполагаем, что среда выполнения .Net установлена ​​(по крайней мере, v3.5)

person JohnZaj    schedule 22.02.2012    source источник
comment
Я знаю, что этот вопрос немного устарел, но если он все еще нужен, вам следует взглянуть на Costura.Fody nuget упаковка. Это встраивает ресурсы во время компиляции, поэтому вы получаете автономный единственный файл .exe.   -  person Remi    schedule 26.01.2018


Ответы (1)


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

Если предположить, что предустановить .net один раз можно, то вариантов много:

Вы можете поместить весь свой код в один проект и, таким образом, создать единую автономную сборку (.exe)

В качестве альтернативы, если у вас много dll, вы можете использовать такой инструмент, как ILMerge, чтобы объединить их все в один .exe перед отправкой, или вы можете встроить dll в качестве ресурсов данных в .exe, а затем использовать события AssemblyResolve приложения для позволяют загружать данные dll из ресурсов по мере необходимости в системе. Или вставьте dll в виде файлов данных, а затем «автоматически установите» их (сохраните их на диск рядом с вашим .exe или в GAC), как первое, что ваша программа сделает, прежде чем она вызовет любую из dll, которые она отправляет таким образом. .

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

person Jason Williams    schedule 22.02.2012
comment
Отредактировал мои требования - да, ожидается, что .Net будет установлен на WinXP. - person JohnZaj; 23.02.2012
comment
Ваш последний абзац выше действительно полезен. Я никогда не думал в контексте «самоустановки», но я думаю, что это один из способов взглянуть на это. К сожалению, файл конфигурации XML, встроенный в качестве ресурса, не будет работать, потому что тогда мне придется иметь другую сборку каждый раз при изменении конфигурации, а это именно то, чего я пытаюсь избежать. +1. но я пока не могу принять это, потому что мне интересны другие точки зрения - person JohnZaj; 23.02.2012
comment
Итак, в основном то, что вы говорите о: или автоматической установке его при запуске, чтобы ваше приложение самоустанавливалось, заключается в том, что мне понадобится какая-то программа «загрузки», которая, по сути, выполняет работу установщика: файлы, копировать DLL и другие выходные данные проекта, регистрировать при необходимости и т. д.? - person JohnZaj; 26.02.2012