Авторегистрация COM компоненты на C#

06.04.16

Разработка - Разработка внешних компонент

Регистрация COM  компоненты автоматически и под любым пользователем

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка с примером
.epf 1,95Mb
2
2 Скачать (2 SM) Купить за 2 150 руб.

Для авторегистрации компоненты задействована следующая логика:

Пытаемся зарегистрировать компоненту с помощью объета "WScript.Shell", по умолчанию система регистрирует компоненту в раздел  HKEY_LOCAL_MACHINE, поэтому если данный шаг выполнять не под администратором программа выдаст ошибку на нарушение доступа к реестру, если вдруг получили ошибку, то пытаемся сделать запись в другой раздел рестра в ветку "HKEY_CURRENT_USER".

При помощи дополнительных агруменов /regfile /codebase для утилиты RegAsm.exe получаем файл с информацией которая будет записана в реестр (.reg).

wshShell.Run(ПутьRegAsm + " " + """" + ПутьДоКомпоненты + """" + " /regfile /codebase", 0, true);

Основная задача подменить имена корневых разделов и сделать запись в реестр с помощью wshShell.RegWrite

Сам парсинг файла .reg будет с помощью процедуры ПолучитьСписокКомандРегистрации  c 2 агрументами МассивЗаписей - пустой масcив  и  ИмяФайла - путь до нашего .reg файла

&НаКлиенте
Процедура ПолучитьСписокКомандРегистрации(МассивЗаписей, ИмяФайла)
	
	Перем Ключ, Параметр, ИмяПараметра, СчетчикПараметров;


	ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла);
	
	Строка = ЧтениеТекста.ПрочитатьСтроку();
		
	Пока Строка <> Неопределено Цикл
		
		Если Лев(Строка, 1) = "[" Тогда //ключ реестра
			
			Если Ключ <> Неопределено И СчетчикПараметров = 0 Тогда //Ключ без параметров
				ДанныеКлюча = Новый Соответствие;
				ДанныеКлюча.Вставить(Ключ, "");
				МассивЗаписей.Добавить(ДанныеКлюча);
			КонецЕсли; 
		
			Ключ = Строка + "\";
			Ключ = СтрЗаменить(Ключ, "[", "");
			Ключ = СтрЗаменить(Ключ, "]", "");
			Ключ = СтрЗаменить(Ключ, "HKEY_CLASSES_ROOT", "HKEY_CURRENT_USER\Software\Classes");			
		
			СчетчикПараметров = 0;
			
		ИначеЕсли Лев(Строка, 1) = "@" Тогда //параметр без имени
			
			ДанныеКлюча = Новый Соответствие;
		
			Параметр = Строка;
			Параметр = СтрЗаменить(Параметр, "@=", "");
			Параметр = СтрЗаменить(Параметр, """", "");
			
			ДанныеКлюча.Вставить(Ключ, Параметр);
			МассивЗаписей.Добавить(ДанныеКлюча);
			
			СчетчикПараметров = СчетчикПараметров + 1;
							
		ИначеЕсли Лев(Строка, 1) = """" Тогда //параметр с именем
			
			ДанныеКлюча = Новый Соответствие;
			
			Параметр = Строка;
			Параметр = СтрЗаменить(Параметр, """", "");			
			
			РазделительПараметра = Найти(Параметр, "=");			
			ИмяПараметра = Лев(Параметр, РазделительПараметра - 1);			
			Параметр = Сред(Параметр, РазделительПараметра + 1, СтрДлина(Параметр) - РазделительПараметра);
			
			ДанныеКлюча.Вставить(Ключ + ИмяПараметра, Параметр);
			МассивЗаписей.Добавить(ДанныеКлюча);
			
			СчетчикПараметров = СчетчикПараметров + 1;
				
		КонецЕсли; 			
	
		Строка = ЧтениеТекста.ПрочитатьСтроку();
	
	КонецЦикла; 

	Если Ключ <> Неопределено И СчетчикПараметров = 0 Тогда //Ключ без параметров
		ДанныеКлюча = Новый Соответствие;
		ДанныеКлюча.Вставить(Ключ, "");
		МассивЗаписей.Добавить(ДанныеКлюча);
	КонецЕсли;

	ЧтениеТекста.Закрыть();

КонецПроцедуры
 

Далее другой процедурой ЗаписатьВРеестр записываем полученные данные

&НаКлиенте
Процедура ЗаписатьВРеестр(wshShell, МассивЗаписей, ПробыватьПодАдминистратором = Ложь)
	
	Для каждого Запись Из МассивЗаписей Цикл
		Для каждого КлючИЗначение Из Запись Цикл
			КлючРеестра = КлючИЗначение.Ключ;
			Если ПробыватьПодАдминистратором Тогда
				КлючРеестра = СтрЗаменить(КлючИЗначение.Ключ, "HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE");
			КонецЕсли; 
			wshShell.RegWrite(КлючРеестра, КлючИЗначение.Значение);
		КонецЦикла; 
	КонецЦикла;

КонецПроцедуры
 

Также приложена обработка с примером работы данного механизма, протестировано на Windows 8 и Windows 10.

COM C# компонента

См. также

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77894    73    273    

191

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    29196    139    100    

92

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    37184    115    128    

116

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    47721    125    66    

68

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    2763    bayselonarrend    14    

48

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    5555    kovalevdmv    26    

77

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1345    3    4    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PowerBoy 3447 07.04.16 07:18 Сейчас в теме
2. spec8s 850 08.04.16 11:18 Сейчас в теме
(1) PowerBoy, это немного не то, есть компоненты которые написаны на C++ и тд, они регистрируются через regsvr32, а здесь рассматривается регистрация .NET библиотеки
3. Zhilyakovdr 147 13.04.16 09:10 Сейчас в теме
При замене через реестр появляется ряд проблем и с сервером предприятия x64 такой фокус не прокатит
Замена компоненты на нужную
Оставьте свое сообщение