2014-09-17 4 views
1

Вчера я столкнулся с проблемой, пытаясь разделить приложение, которое я сделал с некоторыми друзьями. Я дал им свои exe и osx файлы, необходимые для запуска приложения. Они пытались запустить его и продолжали получать сообщения о том, что файлы не регистрируются. Поэтому я сказал им запустить путь Regsrv32.exe/to/file/filename.ocx, и они продолжали получать ошибки.Как распространять мои файлы на Windows 7 и Windows 8?

Приходите, чтобы узнать, только способ зарегистрировать эти файлы был из командной строки администратора. Таким образом, это означает, что UAC делает для меня чрезвычайно трудным поделиться своей работой с друзьями.

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

+3

Несомненно, с помощью любого установщика (Google «Inno Setup» для бесплатного, что неплохо). Однако вашим друзьям все равно придется запускать установщик в качестве администратора. –

+2

Любой установщик, предназначенный для работы на Vista или вверх, автоматически запрашивает возвышение, тем не менее, поэтому им не нужно ничего делать, чтобы запускать его как администратора. Конечно, они должны быть подписаны с учетной записью, которая может установить материал (или, по крайней мере, сможет ввести учетные данные для такой учетной записи), как и в любой другой программе. – reirab

+0

Reirab Inno Setup, который Кен упомянул, будет также запрашивать привилегии на возвышение? Если он спросит, что это прекрасно, они могут принять его, и все хорошо. Просто отстой в данный момент, потому что я не могу позволить кому-либо проверить мои вещи, пока я не получу это. – FrostByte

ответ

1

Как сказал Кен Уайт, Inno Setup - отличное приложение для этого. После установки приложения используйте мастер для создания файла установки. Он покажет вам конфигурацию в главном окне, когда это будет сделано. Только посмотрите на код, который говорит ...

[Files] 
Source: "C:\path to files\whatever.ocx" DestDir: "{app}"; Flags: ignoreversion 

В конце строки после Flags: просто добавьте RegServer так это выглядит.

[Files] 
Source: "C:\path to files\whatever.ocx" DestDir: "{app}"; Flags: ignoreversion regserver 

Теперь ваша установка автоматически зарегистрирует этот файл ocx после его размещения в папке. :)

Убедитесь, что после добавления нового кода вы перекомпилируете настройку в меню вверху.

+0

И затем надейтесь, что вы создадите сценарии установки и удаления, чтобы правильно увеличивать, проверять и уменьшать количество использования компонентов в реестре ... так что, когда какой-то бедный пользователь удаляет ваше приложение Inno-fied, он не разбивает 18 других приложений на своем ПК, удалив разделяемые библиотеки. Это происходит слишком часто, и в результате я считаю Inno вредоносным. Не зло само по себе, но небезопасно с любой скоростью. – Bob77

+0

@ Bob77 Это может произойти только в том случае, если вы установили свои файлы в системный каталог или в какую-либо папку, где другие приложения могут обращаться к файлам. Если вы распространяете свои файлы во всей папке программных файлов и удаляете их по мере удаления приложения, это не может произойти. Вы удалите только те файлы, в которых вы ничего не установили. Мораль истории - вы не можете исправить глупость. Изолируйте свои файлы из остальной части операционной системы и устраните проблему. – FrostByte

+1

Регистрация ActiveX является глобальной и не имеет ничего общего с размещением файлов. Именно поэтому InnoSetup ведет к большому количеству DLL Hell. Если вы хотите, чтобы такие библиотеки были изолированы, вы должны использовать манифесты изоляции (SxS), а затем * не * регистрировать их вообще. – Bob77

0

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

Общий сценарий:

  • App А использует правильный инсталлятор, все в порядке.
  • Приложение B использует InnoSetup со слабо написанным сценарием. Это копирует одну или несколько библиотек ActiveX в нестандартные местоположения, и они накладываются на те, которые установлены должным образом. К сожалению, сценарий Inno повторно регистрирует библиотеки, и теперь реестр указывает на странные местоположения.
  • Все работает Хорошо ... какое-то время.
  • Приложение B удалено и не беспокоится об использовании правильных мест в библиотеке, как указано в файлах DLL библиотек, и не потрудившись уважать количество использования библиотеки, оно удаляет свои собственные копии библиотек.
  • Теперь приложения A, C, D, E и т. Д., Которые использовали любую из этих библиотек, все сломаны.
  • И кто получает звонки по телефону? Не капитан Инно!

Другой сценарий:

  • App Q использует InnoSetup со слабо-авторством сценария. Это тянет те же самые трюки, но, возможно, даже копирует несколько библиотек, где они действительно принадлежат.
  • Приложение Q удаляется, но просто удаляет библиотеки и оставляет теперь сломанные записи регистрации.
  • Приложение R использует одну или несколько одинаковых библиотек, но с помощью соответствующего установщика они уже установлены (поскольку они зарегистрированы) и не копируют их.
  • Приложение R никогда не будет запущено.
  • И кто получает звонки по телефону? Не капитан Инно!

Да другое:

  • App W является VB6 программа, которая получила "установлен", просто копируя EXE и все связанные с DLL, ActiveX и OCXs следующие к EXE (та же папка).
  • Первый запуск приложения W, среда выполнения VB6 не может найти зарегистрированные библиотеки, но отслеживает их через DLL-поиск (LoadLibrary) и самостоятельно регистрирует их на месте.
  • Приложение X установлено через соответствующий установщик, видит, что библиотеки, которые ему нужны, уже зарегистрированы и не копируют их в соответствующие места или не перерегистрируют.
  • Все в порядке ... на некоторое время.
  • Пользователь «удаляет» приложение W, удаляя его папку EXE (беря с собой библиотеки).
  • Теперь приложение X, Y, Z и т. Д., Использующее любую из этих библиотек, сломано. Даже переустановка не помогает.
  • И кто получает звонки по телефону? Не Perfessor XCopy!

У нас есть столкновение между теми, кто следит за правилами развертывания, и теми, кто их игнорирует ... или просто делает свои собственные.

Что должен делать честный парень?

Единственный ответ - это порицать это, когда это рекомендуется, и тем временем использовать изолированные сборки с манифестом SxS в целях самообороны.

+0

Я думаю, что вы, возможно, делаете Inno, устанавливаете несправедливость. Чтение документов для флага «sharedfile» в разделе [Files] кажется, что установка Inno способна хорошо работать с общими DLL. Кроме того: мы используем Inno в течение многих лет и не видели никаких проблем с dll при удалении. – Dabblernl

+0

Нет проблем с самим InnoSetup. Однако он слишком широко используется неправильно, как правило, путем копирования/вставки нестандартных сценариев или попыток использования махинаций, таких как сбрасывание библиотек в странные местоположения, а затем их удаление. В осторожных руках это работает * просто отлично *. Неправильно использовать проблемы с помощью каких-либо инсталляционных инструментов, это скорее всего с помощью этих инструментов, основанных на рукописных сценариях. – Bob77

+0

Итак, какой «правильный» установщик вы бы порекомендовали? – Dabblernl

Смежные вопросы