Я получил файл .reg: «C: \ Program Files (x86) \ Informatik \ Access \ NetCode \ SmartCard.reg» со следующим содержимым:
REGEDIT4
[HKEY_CURRENT_USER\Software\Classes\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}]
@="SmartCard.SmartCardValidator"
[HKEY_CURRENT_USER\Software\Classes\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="SmartCard.SmartCardValidator"
"Assembly"="SmartCard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8eb9c4ad764487a4"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Program Files (x86)/Informatik/Access/../NetCode/SmartCard.dll"
[HKEY_CURRENT_USER\Software\Classes\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\InprocServer32\1.0.0.0]
"Class"="SmartCard.SmartCardValidator"
"Assembly"="SmartCard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8eb9c4ad764487a4"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Program Files (x86)/Informatik/Access/../NetCode/SmartCard.dll"
[HKEY_CURRENT_USER\Software\Classes\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\ProgId]
@="SmartCard.SmartCardValidator"
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}]
@="SmartCard.SmartCardValidator"
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="SmartCard.SmartCardValidator"
"Assembly"="SmartCard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8eb9c4ad764487a4"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Program Files (x86)/Informatik/Access/../NetCode/SmartCard.dll"
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\InprocServer32\1.0.0.0]
"Class"="SmartCard.SmartCardValidator"
"Assembly"="SmartCard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8eb9c4ad764487a4"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Program Files (x86)/Informatik/Access/../NetCode/SmartCard.dll"
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}\ProgId]
@="SmartCard.SmartCardValidator"
Когда я вызываю следующий код:
localesRegistryFile = @"C:\Program Files (x86)\Informatik\Access\NetCode\SmartCard.reg";
Process regeditProcess = Process.Start("regedit.exe", "/s \"" + localesRegistryFile + "\"");
regeditProcess.WaitForExit();
ключи могут быть созданы. Но, к сожалению, только ключи в
[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}]
созданы. Заполнение раздела
[HKEY_CURRENT_USER\Software\Classes\CLSID\{6Z72B1AB-31CA-4852-9552-39E149C6D6D9}]
не создано. Но когда я дважды щелкаю «C: \ Program Files (x86) \ Informatik \ Access \ NetCode \ SmartCard.reg» в проводнике, оба раздела импортируются.
Я уже пытался:
- вызов кода из версии выпуска без участия отладчика.
- вызов regedit без тега / s => без изменений, кроме вопроса безопасности перед импортом
- используйте cmd дляcall regedit.exe / s "C: \ Program Files (x86) \ Informatik \ Access \ NetCode \ SmartCard.reg" => работает как двойной щелчок в проводнике
Это очень странно для меня,Почему работает только вторая половина .reg? В чем может быть причина такого поведения?
Редактировать: После ответа я изменил свой код на это:
var commandLine = "/s \"" + localesRegistryFile + "\"";
var regeditFileName = "";
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
regeditFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "regedit.exe");
}
else
{
regeditFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86), "regedit.exe");
}
MessageBox.Show(regeditFileName + " 64Os: " + Environment.Is64BitOperatingSystem.ToString() + " 64BitProzess: " + Environment.Is64BitProcess.ToString());
Process regeditProcess = Process.Start(regeditFileName, commandLine);
regeditProcess.WaitForExit();
Это работает на моем компьютере, но не на2 других компьютера. Вывод во всех случаях идентичен:
C:\WINDOWS\regedit.exe 64Os: True 64BitProzess: False
Кажется, Visual Studio 2015 или 2017 как-то связаны с проблемой. Я попробовал это на другом компьютере, где установлен VS и там обе записи вставлены.