У меня есть приложение VB6, которое необходимо установить в Windows Vista в качестве стандартного пользователя. Используя Visual Studio 2005, я создал проект установки, который поместит приложение в стандартное безопасное место или папку пользователя. У меня также есть dll, который я хочу установить и зарегистрировать в папке данных пользовательских приложений. Как только мой установщик Windows создан в VS'05, я перевернул свойства 3-го бита слов с использованием msiinfo.exe, чтобы Vista не выдавала учетные данные администратора при запуске msi. Приложение устанавливается без каких-либо проблем, пока оно не попытается зарегистрировать dll в папке данных пользовательских приложений. Когда он достигает этой точки, он выдает ошибку, заявляя, что не может зарегистрировать библиотеку типов для dll. Похоже, что установщик не имеет права регистрировать dll в папке пользователей. Это верно? Я понял, что Vista только жаловалась на стандартное обновление пользователями или изменение элементов, которые затрагивают всех пользователей машины. Есть идеи? Мысли? Предложения?VB6 устанавливается в Windows Vista как стандартный пользователь
ответ
Steve
Мое предложение состоит в том, что вы можете использовать regfree com/manifest файлы вместо регистрации файлов ocx/dll, которые, как вы говорите, являются настоящей работой под основной учетной записью пользователя.
Существует отличное бесплатное приложение вы можете использовать для создания манифеста для вас, а здесь: http://mmm4vb6.atom5.com/
Мы используем это в течение нескольких лет, без каких-либо проблем.
EDIT Сайт MMM опущен. Я вижу here, что у автора возникли проблемы с их хостингом и предоставил другое место, чтобы получить Make My Manifest - download it here.
Привет, у Стива были проблемы с MMM, которые он задокументировал в другом ответе. Может быть, если у вас есть время, вы можете остановиться и посмотреть, есть ли у вас понимание, основанное на вашем опыте, я думаю, он был бы благодарен. Приветствия. – MarkJ
Регистрация DLL действительно влияет на всех пользователей (DLL регистрируются глобально) и поэтому требует прав администратора. Об этом нет.
Решение для более новых сред программирования заключается в том, что DLL не нужно регистрировать для использования. Однако, поскольку vb6 полагается на COM, вам, вероятно, не повезло.
не совсем не повезло ... на самом деле это то, что бесплатно для COM. как и в других ответах – MarkJ
Как описано в этой записи MSDN, COM просматривает HKEY_Current_User \ Software \ Classes, прежде чем смотреть на компьютер HKEY_Classes_Root. http://msdn.microsoft.com/en-us/library/ms693350%28VS.85%29.aspx – dthrasher
Как правило, я согласен с тем, что Joel Coehoorn говорит в своем ответе.
Однако, зная, как работает реестр в этом отношении, я могу сделать предложение о том, что вы попытаетесь вручную зарегистрировать свою DLL до HKEY_CURRENT_USER\SOFTWARE\Classes
, в основном повторяя, что regsvr32.exe сделает с HKEY_LOCAL_MACHINE\SOFTWARE\Classes
.
Это немного взломать, и, возможно, это не сработает, но вы можете попробовать.
- связанных пост на MSDN: http://msdn.microsoft.com/en-us/library/ms693350.aspx (спасибо MarkJ указывая это в комментариях)
- связанные с должностями на vbforums.com: http://www.vbforums.com/showthread.php?t=507228
Что касается вашего комментария о регистрации DLL в HKLU, а не в HKLM, я пробовал это. Используя orca для редактирования msi, я установил корневой столбец реестра в 1. Когда я это сделаю, msi не проверяет проверку валидации. Думаю, я дам манифест xml попробовать ... – 2009-03-17 19:57:05
Настоятельно советуем использовать reg бесплатно COM, а не пытаться это, что звучит довольно неплохо IMHO – MarkJ
Как я уже сказал - это немного взломать, но стоит попробовать. – Tomalak
Вместо того, чтобы непосредственно зарегистрировав DLL файлов, вы можете используйте RegFree COM.
Это связано с созданием файла манифеста XML для вашего приложения, поэтому Windows будет искать ваши DLL-файлы в папке приложения, а не использовать системный реестр для их поиска.
Это значит, что приложение будет работать нормально, если ваш установщик не должен зарегистрировать DLL.
Этих ссылки имеют больше информации:
http://msdn.microsoft.com/en-us/magazine/cc188708.aspx
http://www.devx.com/vb/Article/32888/1954
Вы можете использовать свободный Make My манифеста программного обеспечения для создания файлов манифеста нужно:
+1 Могу ли я предложить U отредактировать ответ UR, чтобы также упомянуть Make My Manifest, как было предложено OneNerd http://mmm4vb6.atom5.com/ – MarkJ
В статье msdn о RegFree Com сказано следующее: «На самом деле, первоначальное намерение Reg -Free COM должен был включать существующие собственные приложения, такие как написанные на Visual Basic 6.0, C++ или некоторая комбинация языков. " Я ничего не нашел на VB6 RegFree ком ... какие-либо ссылки? – 2009-03-17 21:34:15
Make My Manifest работает с VB6 - см. Ответ OneNerd – MarkJ
- Registry-free COM: MakeMyManifest хорошо сказано. Это автоматический инструмент для создания манифестов для проектов VB6: я сам не пробовал.
- DirectCOM является альтернативой COM без регистрации. У него также есть фанаты, я еще не пробовал.
EDIT Сайт МММ опущен. Я вижу here, что у автора возникли проблемы с их хостингом и предоставил другое место, чтобы получить Make My Manifest - download it here.
Существует полуавтоматическая техника для создания манифестов для COM без регистрации. Вы можете создавать манифесты с помощью Visual Studio 2008 (вы можете использовать бесплатную версию, такую как Visual Basic Express Edition). Затем сделайте пару изменений вручную, чтобы сделать манифесты подходящими для использования с VB6. См. this section этой статьи MSDN для пошаговых инструкций - проигнорируйте остальную часть статьи, касающуюся ClickOnce.
Unattended Make My Manifest - римейк МММ, который может использоваться для создания манифестов в автоматизированных сборках. Он использует файл сценария для добавления зависимых компонентов COM.
Я взял на себя смелость пометить этот «regfreecom», потому что я думаю, что это будет правильный ответ на проблему. Я понимаю, что это может быть немного раньше, чем Стивен еще не пробовал ... – MarkJ
@MarkJ: Я думаю, вам не следует обсуждать вопросы с тем, что, по вашему мнению, будет правильным ответом. Это не те теги, для чего это ответы. Кажется, что Reg-free COM работает только для COM-ссылок в сборках .NET. – Tomalak
@Tomalak. Спасибо за отзывы. На самом деле reg-free COM также работает со ссылками COM, используемыми клиентами VB6, например, инструмент MakeMyManifest работает только для клиентов VB6. Или прочитайте статью, указанную в моем ответе. – MarkJ