Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регистрация dll и COM Interop, dll, COM Iterop 
:(
    Опции темы
Perun
Дата 3.12.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.8.2007
Где: Краснодар

Репутация: нет
Всего: нет



Создал расширение оболочки для своего контекстного меню. Получил dll.


В своём приложении использую так:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using ShellExt;

using System.Globalization;
using System.IO;
using Microsoft.Win32;

using System.Diagnostics;

namespace ShellExt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        const string clsid = "{6B3A1F0C-C382-40d6-AA13-33B0AB46EEAA}";
        string guid = "{6B3A1F0C-C382-40d6-AA13-33B0AB46EEAA}";
        string pathDLL = Application.StartupPath+@"\MENU.dll";
        private void button1_Click(object sender, EventArgs e)
        {
           // Регистрируем COM и dll
            Assembly mAsm = Assembly.LoadFrom(pathDLL);

          try
          {
              RegistrationServices mReg = new RegistrationServices();
              mReg.RegisterAssembly(mAsm,0);
         catch(Exception ex)  
          { 
            MessageBox.Show (ex.Message); 
          }
        }

        private void button2_Click(object sender, EventArgs e)
        {   
           try 
            {
             // Отменяем регистрацию COM и dll
             Assembly mAsm = Assembly.LoadFile(pathDLL);  
             RegistrationServices mReg = new RegistrationServices(); 
             mReg.UnregisterAssembly(mAsm); 
            }
           catch(Exception ex)  
            {
             MessageBox.Show (ex.Message);
            }
        }
}



записи в реестре создаются в самой dll
[code=csharp]

[System.Runtime.InteropServices.ComRegisterFunctionAttribute()]
        static void DLLRegisterServer(String str1)
        {
            try
            {
                // For Winnt set me as an approved shellex
                RegistryKey root;
                RegistryKey rk;
                root = Registry.LocalMachine;
                
                rk = root.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", true);//rk.SetValue(guid.ToString(), "BatchResults shell extension");
                rk.SetValue(guid, "FrontLine");                
                rk.Close();

                // Set "Folder\\shellex\\ContextMenuHandlers\\BatchResults" regkey to my guid
                root = Registry.ClassesRoot;
                rk = root.CreateSubKey("*\\shellex\\ContextMenuHandlers\\FrontLine");// новое
                rk = root.OpenSubKey("*\\shellex\\ContextMenuHandlers\\FrontLine", true);// новое
                rk.SetValue("", guid);
                rk.Close();
            }
            catch(Exception e)
            {
                System.Console.WriteLine(e.ToString());
            }
        }

        [System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]
        static void DllUnregisterServer(String str1)
        {
            try
            {
                RegistryKey root;
                RegistryKey rk;

                // Remove ShellExtenstions registration
                root = Registry.LocalMachine;
                rk = root.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved", true);
                rk.DeleteValue(guid);//rk.DeleteValue(str1);
                rk.Close();
                // Delete  regkey
                root = Registry.ClassesRoot;
                root.DeleteSubKey("*\\ShellEx\\ContextMenuHandlers\\FrontLine");
            }
            catch(Exception e)
            {
                System.Console.WriteLine(e.ToString());
            }
        }
[code=csharp]


PM MAIL ICQ   Вверх
Perun
Дата 3.12.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.8.2007
Где: Краснодар

Репутация: нет
Всего: нет



я пробовал регистрацию из командной строки через regasm(для 2.0 делаю и Regasm соответственный). Написал, что всё прошло - меню нет, а реестр заполнился. Укажите на ошибку пожалуйста
PM MAIL ICQ   Вверх
Perun
Дата 4.12.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.8.2007
Где: Краснодар

Репутация: нет
Всего: нет



Кто-нибудь ответит?
PM MAIL ICQ   Вверх
explorer
Дата 6.12.2009, 10:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: 1
Всего: 2



А в GAC сборку свою установил? 
gacutils -i assembly_name.dll
--------------------
 
PM MAIL WWW ICQ   Вверх
Perun
Дата 18.12.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.8.2007
Где: Краснодар

Репутация: нет
Всего: нет



благодарю, установил!
хоть и из другой темы, но решение пришло!!)))
как спасибо сказать?
PM MAIL ICQ   Вверх
tol05
Дата 18.12.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата

Репутация: нет [ + | — ]

выбрать одно из двух )))


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.