Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
1

Запуск другого приложения по значению в реестре

23.08.2012, 09:58. Показов 1146. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Вобщем такая ерунда. В течении работы мое приложение создает различные файлы и работает с ними. Мой код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.reest;
var dir: string;
begin
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  if not reg.OpenKey('software\JoyEnJoy', false) then
   begin
    reg.Free;
    Form1.Hide;
    Form2.ShowModal;
    exit;
   end;
  dir:=reg.ReadString('Dir');
  if (dir+'\JoyEnJoy.exe')<>Application.ExeName then
   if FileExists(dir+'\JoyEnJoy.exe') then
    begin
     ShellExecute (Form1.Handle, nil, PChar(dir+'\JoyEnJoy.exe'), nil, nil, SW_SHOW);
    // WinExec(PChar(dir+'\JoyEnJoy.exe'),1);
     Application.Terminate;
     exit;
    end  else
    begin
     if not DirectoryExists(dir) then
      CreateDir(dir);
     CopyFile(PChar(Application.ExeName), PChar(dir+'\JoyEnJoy.exe'), true);
     ShellExecute (Form1.Handle, nil, PChar(dir+'\JoyEnJoy.exe'), nil, nil, SW_SHOW);
    // WinExec(PChar(dir+'\JoyEnJoy.exe'),1);
     Application.Terminate;
     exit;
    end;
starting;
end;
Эта процедура запускается первой. Суть кода такая - если программа прописана в реестре, то должна быть запущена именно по пути записанном в реестре. Если нету исполняемого файла по пути в реестре или запустили не тот .ехе(старый или копия) мы должны либо скопировать .ехе по пути в реестре, либо запустить имеющийся по пути в реестре исполнительный файл. Код копирует нормально .ехе. Но при запуске происходит ерунда! Работает тот самый исполнительный файл который и дожен, но почему то создает и использует файлы там где был запущен изначально .ехе. То есть если прописана в реестре c:\qwe то запускается c:\qwe\...exe но запускается так как будто его Application.ExeName совсем другой....(к примеру ехе на рабочем столе).. ну вроде ясно объяснил =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2012, 09:58
Ответы с готовыми решениями:

Запуск приложения, зная его путь в реестре
Вобщем штука такая: Имея путь программы в реестре, как её запустить? const string...

Запуск консольного приложения из другого приложения
Я понимаю, что мой вопрос уже разжеван. Однако точного ответа я пока на него не нашел. У меня...

Запуск другого приложения
помогите пожалуйста, вопрос не тяжелый: мне нужно зделать так, что бы когда я нажимаю на пункт в...

Запуск другого приложения
Привет. А подскажите пожалуйста как по нажатию кнопки в Form1 запускать другое виндоусовское...

6
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,110
23.08.2012, 16:27 2
Текущий каталог остается тот, который был на момент запуска 1-ый раз. И все обращения к файлам без указания полного пути идут не туда куда хочется. Полный путь расположения исполнимого файла в run-time можно выдернуть из Application.ExeName
1
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
23.08.2012, 17:11  [ТС] 3
да но почему остается каталог???? как запустить чтобы он поменялся на другой?
0
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,110
23.08.2012, 17:35 4
А c чего ему меняться? Предпоследний параметр ShellExecute по идее задает рабочий каталог, не проверял станет ли он текущим в вызванной программе. А лучше всего в проге использовать полные пути. И ни каких проблем при любом способе запуска программы. Текущий каталог может измениться и при работе самой проги, например при использовании OpenDialog и т.п.
1
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
23.08.2012, 17:36  [ТС] 5
хорошо, спасибо. Использовать пути которые прописаны в реестре буду
0
1928 / 1163 / 423
Регистрация: 31.05.2012
Сообщений: 4,110
23.08.2012, 17:40 6
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
хорошо, спасибо. Использовать пути которые прописаны в реестре буду
Зачем? ExtractFilePath(Application.ExeName) вернет полный путь расположения выполняющегося exe
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
23.08.2012, 17:46  [ТС] 7
да при запуске программы в переменную сохраню ExtractFilePath(Application.ExeName) либо с реестра (все равно реестр читаю) и буду использовать
0
23.08.2012, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2012, 17:46
Помогаю со студенческими работами здесь

Запуск другого приложения
Здравствуйте! Подскажите, как организовать такое: нужно написать приложение, которое при нужных...

Запуск другого приложения
Есть приложение. Мне нужно сначала проверить установлено ли оно и только потом запускать. Если не...

Запуск другого приложения по названию
Нужно сделать запуск другого приложения по названию. Например если написать &quot;Subawy Surf&quot; или...

Проверка на запуск другого приложения
Есть два приложения разработанных в builder c++. Необходимо ввести условие, что одно не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru