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


1

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

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

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

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

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

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


Я полагаю, что ThinApp от VMWare - это ситуация с избыточным убийством, учитывая цену на солнечной стороне в $ 6.000 :)

Я считаю, что portableapps.com является хорошим ресурсом для разработки портативных приложений. Этот вопрос не кажется слишком продвинутым, поэтому вы можете найти свой ответ там.
alfplayer

Ответы:


1

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

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


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

0

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

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


Спасибо за ваше предложение. К сожалению, это не похоже на работу. Я сделал установку в Sandboxie, так что я смог протестировать много похожих вещей в разных песочницах. Чтобы это работало, кажется, что все DLL должны быть зарегистрированы (даже если они находятся в той же папке, что и exe), и некоторые из них должны быть в папке system32 (это не работает, если я их регистрирую когда они где-нибудь еще). Впрочем, завтра я попробую ваш совет на чистом компьютере. Может быть, песочница что-то испортила. :)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.