vb6 activex проект документа установка без вывода сообщений - PullRequest
0 голосов
/ 02 августа 2010

У меня есть проект документа ActiveX vb6, и мне нужно создать пакет MSI (это требование, так как он должен быть развернут через активный каталог), который работает без какого-либо пользовательского интерфейса и вмешательства пользователя.Я выполнил следующие действия:

  1. Я создал проект MSI с использованием установщика Visual Studio и удалил все пользовательские интерфейсы.Добавил все vbd файлы вручную в проект, скомпилировал его.Когда я запускаю msi, он внедряет все файлы без подсказок, но приложение не запускается.

  2. Я создал пакет с помощью мастера пакетов и развертывания, затем открыл исходный код vbПроект pdw, прокомментировал все окна сообщений, назначил значения по умолчанию, где это необходимо.Затем скомпилировал файл setup.exe и скопировал / перезаписал его с помощью setup.exe в пакете установки, созданном ранее.Когда я запускаю его из командной строки, например, «setup.exe -s install.log», приложение устанавливается без подсказок, работает хорошо.И приложение хорошо работает после установки.

  3. Поэтому я решил создать пакет MSI, используя Visual Studio 2008, и добавил созданный выше пакет установки (используя пакет и мастер развертывания).В настраиваемом действии я установил setup.exe для запуска с аргументами '-s install.log'.Мне нужна одна запись в реестре, содержащая путь к приложению, поэтому я добавил ее в раздел настроек реестра.

Еще одно требование - мне нужно запустить другой самораспаковывающийся exe-файл после установки.И этот самораспаковщик просматривает приведенную выше запись реестра и извлекает (перезаписывает) файл по пути к приложению.

Поэтому, используя настраиваемое действие, я настроил запуск update.exe после установки.

Теперь, когда я запускаю msi, он работает нормально, а после установки запускает update.exe, все работает хорошо;но только иногда.Я не мог предсказать, когда это работает, а когда нет.Когда я пробовал такую ​​же MSI на нескольких других машинах, она работала на некоторых, а не на других.И когда я проверил «Установка и удаление программ», было много записей для этого приложения.

Я некоторое время боролся с этим проектом MSI, и теперь я чувствую себя беспомощным.Я не знаю, что я делаю не так.Буду признателен, если кто-нибудь укажет мне правильное направление.

Есть ли другой способ создать установочный пакет для проекта документа activex vb6 без запросов?

1 Ответ

0 голосов
/ 10 июня 2011

Это работает для меня, используя MSI для установки dll-документа ActiveX:

Этот ответ немного запоздал, но я также боролся с этим около года, прежде чем заставить его работать.Кажется, ключ в регистрации ActiveX EXE или DLL при установке на другом компьютере.Следующее работает для меня;Я только перечисляю шаги для DLL, так как 100% *

*1005* Создайте свой документ ActiveX (вы можете иметь формы с dll, как exe) ИспользованиеПакет VB и Развертывание для сбора необходимых файлов в одном месте.Обязательно используйте безопасные системные файлы VB (скачайте zip-файл [vb6sp6sys.zip] из них http://www.jrsoftware.org/iskb.php?vb) вместо файлов, созданных мастером пакетов и развертывания VB. Используйте VB для созданиянебольшой исполняемый файл (убедитесь, что Startup Object - Sub Main), показанный ниже в разделе кода.Так как Internet Explorer является «контейнером» для вашего документа ActiveX, этот маленький exe использует его версию (IE) для загрузки вашего UserDocument1.vbd,В зависимости от того, какую ОС вы используете. Windows 7 и, я полагаю, Vista, по умолчанию используют другую версию IE, которая, по-видимому, не хочет запускать документ ActiveX. Но в их Program Files (x86) естьверсия IE, которая будет - отсюда и проверка того, существует ли папка (x86) или нет, если она не предполагает, что это более низкая версия Windows и работает с использованием обычного IE. Назовите этот небольшой исполняемый файл как-то вроде «SilentStartUp_ByOS.exe» Теперь плохие новости: вам нужно купить Advanced Installer, чтобы использовать его Профессиональную версию, которая необходима дляИзвлеките регистрационную информацию из собственной библиотеки вашей DLL и любых включенных OCX.Существует бесплатная версия Advanced Installer, но она не имеет этой возможности.Примечание. Могут быть и другие установочные пакеты, которые также могут это делать, но Advanced Installer - единственный, о котором я знаю.Я фанат Inno, но не смог найти способ сделать это с Inno. Включите все файлы из 2. выше, вместе с exe, созданным в 3., в ваш установочный пакет.Присвойте значок исполняемому файлу, созданному в 3., с помощью Advanced Installer и сделайте его ярлыком для запуска вашей программы. Обязательно установите все (используя экран «Параметры установки») в AppDataFolder \ AnyFolderNameHere вместо ProgramFilesFolderради того, чтобы обойти проблемы безопасности, которые являются очень строгими на Win7 и Vista, не говоря уже о том, установлен ли он в корпоративной сети.

Когда все будет сделано, поскольку ваша dll была зарегистрирована, IE должен быть в состояниидля запуска вашего документа ActiveX.

Код:

Sub Main()

Dim strTemp As String
'ok, it may be Vista or Windows 7...
strTemp = "C:\Program Files (x86)\Internet Explorer\"
If CheckFileFolderExists(strTemp, False) = True Then
    'ok, use older version of IEXPLORE to run this on Win7 (or Vista)...
    Shell "C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE " & App.Path & "\UserDocument1.vbd", vbMaximizedFocus
Else
    Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE " & App.Path & "\UserDocument1.vbd", vbMaximizedFocus
End If

End Sub

Function CheckFileFolderExists(strName, fFile) As Boolean

' The fFile variable determines whether you're
' looking for a File (True) or Folder(False)
' The strName variable holds the fully qualified
' path you're looking for

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
  CheckFileFolderExists = False

  If fFile = True Then  ' It's a file

    If fso.FileExists(strName) = True Then
      CheckFileFolderExists = True
      Exit Function
    End If

  Else  ' It's a folder/directory

    If fso.FolderExists(strName) = True Then
      CheckFileFolderExists = True
      Exit Function
    End If

  End If

  Set fso = Nothing

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...