Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Нужна помощь в регистрации длл в 7 винде


Автор: hyp1k 2.11.2010, 23:15
Прочитал статью как написать тулбар для интернет эксплорера. Написал тулбар аналогичным способом. Встала проблема написать инсталлер этого тулбара. 

Когда под рукой имеется sdk для установки используются утилиты gacutil и regasm. У клиента на машине, естественно, sdk нету. Поэтому установить эти длл я решил, использовав код:
Код

            Publish objPub = new Publish();
            string sP = Application.StartupPath;
            try
            {                
                objPub.GacInstall(sP + "\\Lib\\BandObjectLib.dll");
                objPub.GacInstall(sP + "\\Lib\\Interop.SHDocVw.dll");
                objPub.GacInstall(sP + "\\Lib\\SampleBars.dll");
                objPub.RegisterAssembly(sP + "\\Lib\\SampleBars.dll");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                this.Close();
            }


Под хр работает идеально. Под 7 виндой даже запуская от имени администратора появляется ошибка:
Отказано в доступе к разделу реестра HKEY_CLASSES_ROOT\CLSID\{тут много циферок через тире}.
Т.е. GacInstall выполняются нормально, а RegisterAssembly вываливает ошибку. Отключение UAC не помогло.

Как победить это?

Ссылка на прочитанную статью:
http://www.codeproject.com/KB/shell/dotnetbandobjects.aspx

Вот какой по идее что нужно выполнить, но не используя sdk:
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil" /if BandObjectLib.dll
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil" /if Interop.SHDocVw.dll
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil" /if SampleBars.dll
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm" SampleBars.dll

Можно, конечно, написать                 
Код

object com = "\"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\RegAsm\" " + sP + "\\Lib\\SampleBars.dll";
ExecuteCommandSync(com);

но хочется воспользоваться
Код

objPub.RegisterAssembly(sP + "\\Lib\\SampleBars.dll");



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)