#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