В своей программе я проверяю ключ реестра при запуске, и если он почему-то не существует, я запускаю reg-файл, расположенный в папке приложения, с помощью команды ShellExecute. Как я могу избежать получения подтверждающих сообщений при выполнении этой команды. Есть ли способ сделать это или по соображениям безопасности это невозможно?
Как избежать подтверждающего сообщения при запуске файла .reg с помощью команды shellexecute
Ответы (4)
Используйте параметр командной строки / s. (см. http://support.microsoft.com/kb/82821)
person
Stephane
schedule
16.01.2012
А как мне это сделать в Delphi? Я все еще использую ShellExecute? Был бы признателен за пример
- person Mikayil Abdullayev; 16.01.2012
ShellExecute подойдет. Я бы использовал
reg import
, а не regedit
.
- person David Heffernan; 16.01.2012
ссылка на MS не работает, как раньше
- person Ivan Ferrer Villa; 23.04.2021
Возможно. Два метода:
- % windir% \ system32 \ regedit.exe / s file.reg
- % windir% \ system32 \ reg.exe импортировать file.reg
Либо автоматически импортирует файл .reg в реестр.
person
drf
schedule
16.01.2012
это сработало, за исключением того, что теперь вы должны быть с правами администратора, так же как и многие запросы.
- person BoB3K; 10.02.2021
попробуйте это для импорта файла * .reg,
procedure ImportRegistry;
var
strProgram :String ;
strCommand :String ;
fileOne :String ;
begin
fileOne:=ExtractFilePath(Application.ExeName)+ 'my_Resources\Default.reg';
strProgram := 'REGEDIT' ;
strProgram := strProgram + #0 ;
strCommand := '/SC /C ' + ExtractShortPathName(fileOne) ;
strCommand := strCommand + #0 ;
if ShellExecute(0,nil,@strProgram[1],@strCommand[1],nil,SW_HIDE) <= 32 then
begin
ShowMessage(SysErrorMessage(GetLastError)) ; //if there is any error in importing
end;
end;
Также вы можете попробовать эту ссылку unitEXRegistry.pas
Этот модуль unitEXRegistry.pas имеет очень полезные функции для экспорта файла реестра, а также для автоматического импорта экспортированного файла * .reg.
procedure exportREgis;
var
texpr : TExRegistry;
begin
texpr:=TExRegistry.Create;
texpr.RootKey:=HKEY_CURRENT_USER;
texpr.OpenKeyReadOnly('\MyKey');
texpr.ExportKey (ExtractFilePath(Application.ExeName)+'ExportedReg.reg');
texpr.Free;
end;
Затем для импорта вы можете использовать (тихо)
procedure TForm1.Button1Click(Sender: TObject);
var
texpr : TExRegistry;
begin
texpr:=TExRegistry.Create;
texpr.ImportRegFile('c:\myReg.reg');
texpr.Free;
end;
person
PresleyDias
schedule
17.01.2012
Видимо есть ошибка в REG IMPORT - он пишет сообщение об успешном завершении в STDERR вместо STDOUT.
Следующий код .bat решает проблему. Сообщение об успехе отбрасывается, но отображается сообщение об ошибке.
SET RegError=%TEMP%\RegError.txt
REG IMPORT "%Settings.reg%" 2>"%RegError%" && DEL /Q "%RegError%" || @(ECHO Error importing %Settings.reg%: & TYPE "%RegError%" & PAUSE)
SET RegError=
person
user15261314
schedule
26.02.2021
HKLM
. В противном случае вы не сможете его импортировать. - person David Heffernan   schedule 16.01.2012reg import
- person David Heffernan   schedule 16.01.2012reg
похоже на инструмент, предназначенный для этой задачи. но следует тестировать в ОС с включенным UAC. - person kobik   schedule 16.01.2012regedit.exe
илиreg.exe
. Если вам действительно нужно это сделать, используйте API реестра, так как часто regedit / reg блокируются в корпоративных средах, и даже если это не так, у вас нет возможности проверить, удалось ли это, или выполнить обработку ошибок (для этого предназначены API) . - person Remko   schedule 14.05.2020