Хорошо, поэтому я пытаюсь упаковать DLL, используемую моей таблицей, с файлом excel. Моя таблица будет скопирована на разные компьютеры и использована из разных мест, и я стараюсь, чтобы пользователь не запускал regasm каждый раз, когда рабочий лист (с DLL) копируется на новый компьютер. Я прибегал к выполнению команды оболочки для регистрации DLL с regasm при запуске. Вот мой код:Регистрация DLL с regasm из VBA с командой оболочки
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strWinCmd As String
Dim retVal As Double
strWinCmd = "cmd.exe %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /u /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll"""
retVal = Shell(strWinCmd, vbHide)
End Sub
Private Sub Workbook_Open()
Dim strWinCmd As String
Dim retVal As Double
strWinCmd = "cmd.exe /c %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll"""
Call Shell(strWinCmd, vbNormalFocus)
Call Button_Handlers.Sleep(1500)
Call Button_Handlers.Initialize
End Sub
Для справок Button_Handlers.Sleep просто вызывает метод системного сна и Button_Handlers.Initialize делает это:
Sub Initialize()
'This JART.MainJobControl is the main class in the JART DLL
Set JART_Instance = New JART.MainJobControl
'Use JART_Instance
End Sub
Поэтому в основном я пытаюсь зарегистрировать DLL при запуске -up и заново зарегистрировать его. Моя проблема в том, что когда я открываю электронную таблицу на новом ПК, я получаю сообщение об ошибке в Button_Handlers.Initialize. Он говорит мне, что я пытаюсь использовать неопределенный класс (JART.MainJobControl), как если бы DLL не ссылалась. Если я попытаюсь снова открыть файл, все будет хорошо работать ???
Способ, которым я делаю это, вручную добавляет ссылку на DLL на машину, которая уже зарегистрировала ее с помощью regasm. Затем я сохраняю этот файл excel и переношу его на компьютер, на котором не была зарегистрирована DLL, и попробуйте открыть его и запустить. Я думаю, что поскольку ссылка уже добавлена в файл excel, все, что нужно сделать, это зарегистрировать ее с помощью regasm. Кто-нибудь знает, почему это не сработает? Разве я не сплю достаточно долго.
Это не может работать, Regasm.exe необходимо запустить с повышенными правами, чтобы он мог записывать ключи реестра HKLM. Просто нет замены для его запуска * один раз *. –
Что произойдет, если dll используется другими программами? : p Почему вместо этого не упаковывать таблицу в программу установки? –
Эта DLL не используется другими программами. В этом случае я просто упаковываю DLL рядом с файлом excel. На самом деле у меня это получилось, но я забыл, что мне нужно делать специально, чтобы он работал для меня. – Ian