Создание переносимого приложения - регистрация DLL и DLL в system32

3062

Я хочу сделать приложение переносимым (в Windows XP), чтобы оно могло запускаться непосредственно с компакт-диска. Приложению требуется, чтобы некоторые DLL и OCX были зарегистрированы, а некоторые из них должны быть в system32 при регистрации (по какой-то причине).

Каковы последствия регистрации большого количества библиотек DLL с помощью regsvr32 в программе / скрипте-обертке вокруг приложения? Может ли это испортить систему? А что происходит, когда файлы удаляются (так как они находятся на сменном носителе)? Я думаю, я мог бы снова отменить их регистрацию, когда переносимое приложение остановлено, но что, если один из них - это обычная DLL, которая также используется другими приложениями? Разрушит ли это регистрацию эти другие приложения?

Я предполагаю, что копирование файлов случайным образом в system32 при запуске портативного приложения - плохая идея. Зачем приложению требовать, чтобы некоторые DLL и OCX находились в папке System32? Есть ли способ обойти это? Является ли единственный способ заставить программу / скрипт-обертку убедиться, что ни один из файлов не существует до копирования, и удалить их после запуска приложения?

Изменились ли эти вещи в Windows Vista и 7?

Приложение, которое я хочу сделать портативным, является демо-версией (норвежского) приложения по генеалогии Embla Familie og Slekt ( норвежский веб-сайт, перевод Google ). Мой дедушка, который много занимался генеалогией, недавно скончался, поэтому я хотел бы передать его работы моим родственникам. Было бы здорово, если бы все, что им нужно было сделать, это вставить компакт-диск, и программное обеспечение всплыло бы. Его установка и настройка для использования данных моего дедушки немного сложны для начинающего пользователя компьютера. (Я пытался связаться с авторами безуспешно, но я попробую еще раз, если я заставлю его работать, чтобы убедиться, что распространение демоверсии законно)

Спасибо и, пожалуйста, прости мое невежество - я обычно не запускаю Windows. :)

1
я полагаю, что ThinApp от VMWare - это немного излишняя ситуация, учитывая цену на солнечной стороне $ 6.000 :) 14 лет назад 0
Я считаю, что http://portableapps.com является хорошим ресурсом для разработки портативных приложений. Этот вопрос не кажется слишком продвинутым, поэтому вы можете найти свой ответ там. alfplayer 14 лет назад 0

2 ответа на вопрос

1
shf301

Я не знаю, почему библиотеки DLL должны быть в System32; они не должны быть, это плохая практика, но прикладные библиотеки DLL находятся в системном каталоге.

Да, DLL и OCX, которые предоставляют COM-объект (например, те, которые должны быть зарегистрированы), должны быть зарегистрированы и внесены в реестр. Однако в Windows XP и более поздних версиях имеется бесплатная регистрация COM. Краткое объяснение состоит в том, что для каждого .DLL и .EXE вы создаете файл filename.ext.manifest, в котором перечислены все компоненты, которые он экспортирует и использует. К сожалению, реальность сложнее. Смотрите эту статью для описания . Теоретически возможно получить информацию, необходимую для файлов манифеста, но вам понадобится хорошее понимание COM.

Спасибо. Это отвечает на большую часть моего вопроса. Однако я решил свою проблему, установив программное обеспечение внутри Sandboxie (sandboxie.com), а затем сделав Sandboxie портативным. Обратите внимание, однако, что лицензионное соглашение Sandboxie не позволяет вам распространять Sandboxie на другие компьютеры без коммерческой лицензии или специального разрешения автора. 14 лет назад 0
0
Neal

Много лет назад я понял, что когда Windows нужен dll-файл, который не был зарегистрирован, он автоматически просматривается в каталоге exe-файла. В таком мире сделать приложение переносимым очень просто.

Я понятия не имею, помню ли я это право (или даже более или менее правильно), или это все еще так, но копирование всех файлов на USB-накопитель и установка его на другой компьютер было бы довольно быстрым и простым проверять.

Спасибо за ваше предложение. К сожалению, это не похоже на работу. Я сделал установку в Sandboxie, поэтому я смог протестировать много похожих вещей в разных песочницах. Чтобы это работало, похоже, что все библиотеки DLL должны быть зарегистрированы (даже если они находятся в той же папке, что и exe-файл), а некоторые из них должны быть в папке system32 (это не работает, если я их регистрирую) когда они где-нибудь еще). Впрочем, завтра я попробую ваш совет на чистом компьютере. Может быть, песочница что-то испортила. :) 14 лет назад 0

Похожие вопросы