Могу ли я использовать RegFree Com с приложением, написанным в Excel VBA? - PullRequest
0 голосов
/ 02 апреля 2009

У меня есть приложение, которое написано в Excel VBA, myApp.xls. В настоящее время мы используем InstallShield для распространения приложения. Поскольку мы переходим на Windows Vista, мне нужно иметь возможность устанавливать приложение как обычный пользователь. Это не позволяет мне обновлять реестр во время процесса установки. В дополнение к приложению Excel у нас также есть несколько приложений VB6. Чтобы установить эти приложения, я смог использовать RegFree com и Make My Manifest (MMM), как это было предложено людьми на этом форуме (я очень благодарен за понимание, кстати!). Этот процесс, хотя и немного утомительный, работал хорошо. Затем я упаковал вывод MMM в проект установщика VS '05 и удалил приглашение UAC в msi с помощью msiinfo.exe. Теперь я столкнулся с установкой приложения, которое в основном находится в файле Excel. Я изменил манифест, который MMM создал для меня для одного из моих приложений VB6, и попытался запустить файл Excel через него, но мне не повезло. Кто-нибудь знает способ сделать это? Работает ли RegFree com с VBA? Любые мысли или предложения будут высоко оценены.

Спасибо

Steve

1 Ответ

1 голос
/ 19 апреля 2009

Да, можно использовать без регистрации COM через VBA, на Win2k3 +.

По сути, reg-free говорит, что «этот класс COM больше не нужно регистрировать, чтобы его можно было обнаружить, вместо этого информация о регистрации будет передаваться манифестом».

На сами манифесты косвенно ссылаются исполняемые файлы, если они встроены в исполняемый файл или имеют имя * .exe.manifest. Однако, в случае VBA - ваш код не находится в исполняемом вами файле, поэтому вам нужен другой способ получить ссылку на манифест.

Вот где появляется объект Microsoft.Windows.ActCtx - он позволяет вам создавать экземпляры вашего объекта с явной ссылкой на манифест.

Например (в JS, так как я разбираюсь в синтаксисе VBA):

var actCtx = WScript.CreateObject("Microsoft.Windows.ActCtx");
actCtx.Manifest = "myregfree.manifest";
var obj =  actCtx.CreateObject("MyObj");   
...