:: Visual Foxpro, Foxpro for DOS
Re: Повышение прав приложения при работе под Windows 7 и работа OCX без регистрации
Sega

Сообщений: 511
Откуда: Ярославль
Дата регистрации: 27.12.2000
В своей программе используется ActiveX RichTextControl. Столкнулся с проблемой того, что у пользователей не зарегистрирован в системе класс richtx32.ocx и нет прав, чтобы его зарегистрировать.
Настала нужда поднять и осилить эту тему.

Решил воспользоваться технологией Reg-Free COM. Что сделал:
1. При помощи примера кода из статьи вытащил из своего TEST.EXE файл манифеста
2. Дополнил его строками COM-класса. Получился вот такой файл:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
type="win32"
name="Microsoft.VisualFoxPro"
processorArchitecture="x86"
/>
<description>Visual FoxPro</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
language="*"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
/>
</dependentAssembly>
</dependency>
<file name="richtx32.ocx" size="212240">
<comClass description="Microsoft Rich Textbox Control 6.0 (SP6)" clsid="{3B7C8863-D78F-101B-B9B5-04021C009402}" progid="RichText.RichTextCtrl.1" threadingModel="Both"/>
</file>
</assembly>

3. Засунул файл манифеста в проект и пересобрал свой TEST.EXE
4. При помощи того же кода (п.1) проверил и убедился, что выдается правильная информация о файле манифеста
5. Разрегистрировал файл richtx32.ocx в системе и просто положил файл в ту же папку, что и TEST.EXE

Не работает. На той форме, где вызывается RichTextbox программа выдает ошибку и говорит, что контрол не найден.

Что я делаю не так?
Ratings: 0 negative/0 positive
Re: Повышение прав приложения при работе под Windows 7 и работа OCX без регистрации
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
У меня студия для изоляции richtext контрола генерит вот такой манифест:
<?xml version="1.0" encoding="utf-8"?>
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
<assemblyIdentity name="CP1.exe" version="1.0.0.0" type="win32" />
<file name="RICHTX32.OCX" asmv2:size="260096">
<hash xmlns="urn:schemas-microsoft-com:asm.v2">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsigigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsigigestValue>mw6kQq+efi3RmgCf4N0kR+niGDWtmCAfZ3wwj+m/z3o=</dsigigestValue>
</hash>
<typelib tlbid="{3b7c8863-d78f-101b-b9b5-04021c009402}" version="1.2" helpdir="C:\Windows\SysWow64\RTFBox98.CHM" resourceid="0" flags="CONTROL,HASDISKIMAGE" />
<comClass clsid="{3b7c8860-d78f-101b-b9b5-04021c009402}" threadingModel="Apartment" tlbid="{3b7c8863-d78f-101b-b9b5-04021c009402}" progid="RICHTEXT.RichtextCtrl.1" description="Microsoft Rich Textbox Control 6.0 (SP4)" />
</file>
</assembly>
Плюс к тому ругается (warning показывает) на "невозможность импортировать" некоторых реестровых веток. Надеюсь что они не нужны для реальной работы
Возможно что некоторые узлы и не нужны фоксу - там уже вплоть до v3 пространства имён используются

Коренное отличие от твоего манифеста - наличие узла typelib (хз нужен он или нет), но что ещё более важно, clsid - у тебя прописан guid библиотеки, а не самого ком-класса! Тройка перед первым слэшем а не нолик, как у меня прописалось.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Повышение прав приложения при работе под Windows 7 и работа OCX без регистрации
Sega

Сообщений: 511
Откуда: Ярославль
Дата регистрации: 27.12.2000
Игорь, спасибо. Всё получилось.
Действительно, прописал по ошибке идентификатор библиотеки, а не самого класса.
В своем файле манифеста просто исправил 3 -> 0
Остальная лабуда не пригодилась.

Другие ActiveX сделал по аналогии. За подсказку большой респект.

Теперь осталась проблема только с регистрацией запуска из программы файла помощи.
Т.е. команды
regsvr32 FoxhHelpps9.dll
FoxhHelp9.exe /regserver
хочется тоже изолировать.

по FoxhHelp9.exe в реестре информацию нашел. Получилось так:
<file name="foxhhelp9.exe" size="73728">
<comClass
description="Foxhtmlhelp9 Class"
clsid="{B9505A02-6AAC-11D1-8632-00A0C903A97F}"
progid="Foxhhelp.Foxhtmlhelp9"
threadingModel="Apartment"
/>
</file>

В манифест добавил, но справка не запускается.
по FoxhHelpps9.dll нашел только CLSID {B9505A00-6AAC-11D1-8632-00A0C903A97F}
Тут в какую сторону копать?
Ratings: 0 negative/0 positive
Re: Повышение прав приложения при работе под Windows 7 и работа OCX без регистрации
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Увы, про хелп не знаю. Просто контекстного хелпа я не мастерил (того что по What's this кнопке активируется - все эти фоксовые свойства WhatsThis* да и просто HelpContextID), а "обычный" chm без проблем запускается тривиальным ShellExecute или утилитой hh.exe (там можно даже параметрами не только файл но и раздел внутри chm указать). Вполне можно прописать запуск в меню и поставить этому пункту штатный хоткей F1.
Т.е. я просто не вижу потребности в данной вспомогательной штуке

Кстати, на некоторых версиях ОС не работает chm "из коробки" - нужно дополнительные компоненты устанавливать чтобы его смотреть. Ну и тоже старая проблема с запуском chm расположенного на сетевом ресурсе - тоже не работает по умолчанию (хотя можно в безопасности IE что-то подкрутить)... В принципе сейчас можно и в других форматах хелп презентовать - от pdf/doc до просто набора html-ей, или тупо веб-ссылки (на онлайн версию хелпа - если есть свой сайт, и если продукт достаточно динамично развивается, т.е. хелп часто обновляется - там же удобно и обратную связь с разрабом сделать - от простейшего микро-форума, до полноценного доступа к хелпдеску/багтрекингу).


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 25 (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика