2013-08-20 2 views
0

Хорошо, поэтому я пытаюсь упаковать 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. Кто-нибудь знает, почему это не сработает? Разве я не сплю достаточно долго.

+1

Это не может работать, Regasm.exe необходимо запустить с повышенными правами, чтобы он мог записывать ключи реестра HKLM. Просто нет замены для его запуска * один раз *. –

+1

Что произойдет, если dll используется другими программами? : p Почему вместо этого не упаковывать таблицу в программу установки? –

+0

Эта DLL не используется другими программами. В этом случае я просто упаковываю DLL рядом с файлом excel. На самом деле у меня это получилось, но я забыл, что мне нужно делать специально, чтобы он работал для меня. – Ian

ответ

0

Ну, я только что закончил работу над причудой, которую я упоминаю в вопросе. Мне пришлось переместить инициализацию в другой метод, чтобы он не вызывался в том же самом действии, что и в regasm. Кажется, это хорошо работает. У меня еще не было проблем с этим.

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

  • Нет связанных вопросов^_^