C # Программно регистрирует драйвер dll во время выполнения

#c# #.net #winforms #dll

#c# #.net #winforms #dll

Вопрос:

Извините, если это повторяющийся вопрос, но я не смог найти ответ.

Я пишу программу для масштабирования хранилища. Драйвер весов доступен в .формат dll. Я использую программу, ссылаясь на драйвер в этом .dll. Теперь я регистрируюсь.dll через CMD. Поэтому мне нужно зарегистрировать .dll во время выполнения или установки приложения. Но я не смог настроить его ни по ссылке, ни по коду. Теперь я регистрирую его следующим образом.

 c: [Enter]
cd RongtaScales [Enter]
C:WindowsMicrosoft.NETFrameworkv2.0.50727RegAsm.exe  file.dll [Enter]
  

Это работает таким образом, но клиенты не всегда могут зарегистрировать его таким образом. Мне нужно зарегистрировать его вместе с программой.
Я попробовал следующее:

 try
        {
            Assembly asm = Assembly.LoadFile(@"E:rtscaledrv.dll");
            RegistrationServices regAsm = new RegistrationServices();
            bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase);
            MessageBox.Show("Installed: '"  bResult.ToString()   "'");
        }
        catch (Exception exs)
        {
            MessageBox.Show("Error: '"  exs.ToString()  "'");
            //throw;
        }
  

Это вернуло ошибку следующего вида:

введите описание изображения здесь

Если я пытаюсь добавить через ссылки, он возвращает следующую ошибку:

введите описание изображения здесь

Мой вопрос в том, как я могу зарегистрировать .dll вместе во время запуска или установки программы? Я не могу найти точный ответ от Google прямо сейчас. Спасибо!

ОБНОВЛЕНО, если я попытаюсь использовать пакетный файл, он также не работает:

 @echo off
setlocal
set "RegSvr32=%SystemRoot%System32regsvr32.exe"
set "RegAsm=%SystemRoot%Microsoft.NETFrameworkv2.0.50727RegAsm.exe"
if not exist "%RegAsm%" set             "RegAsm=%SystemRoot%Microsoft.NETFrameworkv4.0.30319RegAsm.exe"
if not exist "%RegAsm%" set     "RegAsm=%SystemRoot%Microsoft.NETFrameworkv1.1.4322RegAsm.exe"
rem Make note of any files which cause an exception to be thrown.
for /f "delims=" %%A in ('dir a-d /b *.dll *.ocx') do "%RegSvr32%" /s "%%~fA"     amp;amp; echo %%~nA SVR Registered || "%RegAsm%" /nologo /silent "%%~fA" 2>nul amp;amp; echo     %%~nA ASM Registered || echo %%~nA Skipped
endlocal
@pause  /b 0
  

Он вернул:

 rtscaledrv Skipped
Press any key to continue . . .
  

Комментарии:

1. Вы пытались использовать пакетный файл?

2. Да, но это не помогло.

3. Я имею в виду, что вы можете поместить эти 3 строки (как вы сказали, они работают, когда вы делаете это вручную) в файл bat и запустить его от имени администратора.

4. @Farshad Можешь привести пример? По какой-то причине у меня это не сработало. После этого нет другого способа сделать это через the bat?

5. Что вы получили, когда сделали это? @minordestroyer