link dependencies
Пишу маленькую програмку используя платформу .NET (версия не имеет значения).
И для работы этой програмки на компьютере источнике хочу чтоб платформа .NET не требовалось. Можно ли все библиотеки используемые моей программой включить в самой программе чтоб OS (Windows источника) не требовала установку платформы.
В интернете ничего по теме не нашел к сожалению и решил все таки вас побеспокоить :o
Еще какие нибудь варианты ?!
Возможные варианты ответа:
- сконструировать двигатель на твердом топливе;
- сконструировать двигатель на водородном топливе;
- сконструировать дизельный двигатель;
- и т.д.
Обрати внимание, Мыхалыч, ключевое слово "сконструировать", т.е., в твоем случае, выбрать другую технологию для своей софтины. хотя это и не привествуется, но тебе предложили два варианта УКи выше, а мой будет крайне третьим:)
Вопрос надо в FAQ ввести, наверное. В раздел "Первые шаги в .NET"
Дотнет 2.0 уже наверно в каждой NT-шке на этой планете стоит, но стабильно каждые пол-года всплывает такая тема.
А линкер такой есть но стоит приличных денег.
Должен вас огорчить уважаемый(ая) hardcase к сожалению в нашей стране на большинства компьютеров установлены Win XP без всяких Service Pack'ов.
А .NET платформа как мы все знаем появляется с Сервис пака 2 то ли 3.
Статистику по машинам в студию! Неужто у такого огромного количества пользователей висят порнобаннеры и машины работают в ботнетах и svchost падает постоянно?
Так пускай пользователь/админ и ставит ее, коль ещё нету. Ваша "небольшая" программа после линковки с mscorlib и прочими System.Core.dll превратится в многомегабайтного монстра. :D
А как можно в реестре прописать эти библиотеки ?
Можно пример кода ?
Так пускай пользователь/админ и ставит ее, коль ещё нету. Ваша "небольшая" программа после линковки с mscorlib и прочими System.Core.dll превратится в многомегабайтного монстра. :D
Да вы правы.
мой простенький Hello World приложение которое ничего и толком не делает и весит 14 KB, после того как я ее собрал со всеми потрохами с помощью vmWare ThinApp стал весить аж 170 MB.:eek:
Я глазам своим не верю не ужели нет никакого выхода из положения.
А нельзя ли все эти дллки впихнуть во внутрь самой проги (.exe) файла ?:confused:
Для запуска необходимо скопировать в папку с программой (минимальный набор):
Accessibility.dll
mscoree.dll
mscorjit.dll
mscorlib.dll
mscorwks.dll
msvcr80.dll
sortkey.nlp
sorttbls.nlp
System.dll
Если приложение использует WinForms, то сразу становятся нужны:
gdiplus.dll (не всегда, но почти всегда)
System.Drawing.dll
System.Windows.Forms.dll
Если работает с данными, то обычно как минимум надо:
System.Data.dll
System.Transactions.dll
и т.д. по надобности другие сборки
Сразу скажу, чтобы кидать все дллки в одну папку и не прописывать ничего в реестре надо патчить mscoree.dll, а это не совсем честно. Поэтому вариант -
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework параметр InstallRoot должен указывать на каталог, в котором создан подкаталог v2.0.50727 и в него надо переместить файлы:
mscorjit.dll
mscorlib.dll
mscorwks.dll
sortkey.nlp
sorttbls.nlp
остальные файлы нужно оставить в папке с программой.
Все .NET сборки, кроме (!!!) mscorlib.dll и System.dll можно упаковать в один исполняемый файл замечательной программой .NETZ
Сейчас пример. Возьмем HelloWorld.exe
Он использует System, System.Windows.Forms, System.Drawing
1. В каталоге программы (пусть будет C:\Temp) файлы:
Accessibility.dll
HelloWorld.exe
mscoree.dll
msvcr80.dll
System.dll
System.Drawing.dll
System.Windows.Forms.dll
2. Создадим тут же каталог "v2.0.50727"
и закинем в него:
mscorjit.dll
mscorlib.dll
mscorwks.dll
sortkey.nlp
sorttbls.nlp
3. В реестре пропишем (.reg-файл):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"InstallRoot"="C:\\Temp"
и вуаля, работает
4. теперь качаем утилиту .NETZ
пишем в командной строке:
и уже получаем на выходе HelloWorld.exe размером примерно 1,8Мб :D
Теперь Accessibility.dll,System.Drawing.dll и System.Windows.Forms.dll можно удалить.
5. В итоге получили следуещее:
C:\Temp\v2.0.50727\mscorjit.dll
C:\Temp\v2.0.50727\mscorlib.dll
C:\Temp\v2.0.50727\mscorwks.dll
C:\Temp\v2.0.50727\sortkey.nlp
C:\Temp\v2.0.50727\sorttbls.nlp
C:\Temp\HelloWorld.exe
C:\Temp\mscoree.dll
C:\Temp\msvcr80.dll
C:\Temp\System.dll
И необходимость прописывать в реестре путь к C:\Temp или другому каталогу
Весь размер C:\Temp вышел на 16мб
Вообще всё это изврат, но зато очень увлекательно :)
Ну и еще раз предупрежу, что MS не разрешает ковырять свои инсталляторы насколько я знаю, поэтому сами думайте как поступить. Просто информация, что технически так можно сделать и безо всяких платных утилит.
[SIZE=2]
Кстати этот же фреймворк 2.0 безо всяких сервис-паков который (dotnetfx20.exe) успешно ставится на Win2K SP3 и на WinXP SP0, так что может просто пусть ставят хотя бы такой. Только нужно предварительно установить обновление WindowsInstaller-KB884016-v2-x86.exe (3.0)
[/SIZE]
Буду иметь ввиду что есть такое решение проблемы.
Большое человеческое спасибо уважаемый(ая) bagie2
Моно ставится на любую из ныне здравствующих WinXP. Насчёт сервиспаков: если первый сервиспак народу не доставил, то второй доставил чуть менее чем всем; поэтому если вы видите Windows XP, с вероятностью 95% у неё будет второй сервиспак. Во всяком случае, если пять лет назад второй сервиспак ещё приходилось ставить поверх (сам этим занимался), то к 2007 году даже XP SP1 была относительно редкой, чаще же встречался второй сервиспак.
Изобретать обходные варианты с дописыванием библиотек дотнета прямо в инсталлятор глупо хотя бы уже потому, что таким способом вы лишаете пользователя запустить программу под моно. А даже если не лишаете, то заставляете его качать кучу ненужного; этот подход порочен.