Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.21;
Скачать: CL | DM;

Вниз

Запуск exe файла   Найти похожие ветки 

 
BioStaR   (2008-08-11 11:51) [0]

Привет всем! У меня такой вопрос...

Можно ли с помощью Delphi программно активировать, запустить exe файл?! К примеру просто указав путь к нему или через реестр, найдя ключ, который содержит в себе путь к файлу?

Подскажите пожалуйста, если такое возможно, буду благодарен!


 
Ega23 ©   (2008-08-11 11:52) [1]

Можно. CreateProcess, ShellExecute + F1


 
BioStaR   (2008-08-11 11:56) [2]

Ммммм! Я не совсем понял! Если не затруднит можете показать на примере? =)))


 
Ega23 ©   (2008-08-11 11:58) [3]


> Ммммм! Я не совсем понял! Если не затруднит можете показать
> на примере? =)))
>


Могу. Набираешь CreateProcess, наводишь на него курсор, нажимаешь F1 (справа от Escape). Читаешь справку.
Аналогично можно поступить с ShellExecute.


 
Anatoly Podgoretsky ©   (2008-08-11 12:05) [4]

> Ega23  (11.08.2008 11:58:03)  [3]

А если непонятно?

А если непонятно, то повторяешь это в любой поисковой системе и смотришь примеры, которых просто невероятно много.


 
brother ©   (2008-08-11 12:25) [5]

только вот что за файл, путь которого находится в реестре?
зы тебе еще и чтение из реестра надо да? ;)


 
BioStaR   (2008-08-11 12:29) [6]

Ну с ShellExecute я разобрался т.к. раньше работал с этим! Могу запустить файл указав его место расположение (ShellExecute(handle,nil,"путь к файлу","","",SW_SHOWNORMAL);). Но вот, чтобы запустить черз реестр, не понимаю - справка английская, а инет у меня не бесконечный, чтобы по ссылкам летать =)))...

Если кто - то знает как это можно организовать, подскажите, плз!


 
Ega23 ©   (2008-08-11 12:30) [7]


> Но вот, чтобы запустить черз реестр, не понимаю


Что значит "запустить через реестр"?


 
brother ©   (2008-08-11 12:31) [8]

http://delphimaster.net/view/15-1218153220/
в посте [39] есть пример, только не write, а read делай! )


 
Германн ©   (2008-08-11 12:31) [9]


> Но вот, чтобы запустить черз реестр, не понимаю

Бред. Реестр не для того предназначен, чтобы через него что-то запускали.
:)


 
brother ©   (2008-08-11 12:33) [10]

те, прочитай ветку реестра, и используй в парамертах запуска
зы что за файл то???


 
BioStaR   (2008-08-11 13:13) [11]

Из реестра для того чтобы точно запустился! Вдь если указывать просто путь прога будет работать если файл там  действительности будет! А если не будет не запустит! А в реестре допустим я поставил игру San Andreas (ведб в реестр в одно и тоже место записывается на любом компе) и у меня ключ App сожержит путь к файлу исполняемому. И идея такая чтобы с помощью этого ключа запустить прогу, игру.


 
Ega23 ©   (2008-08-11 13:23) [12]

А если я его из реестра удалю, то что?

Ну это фигня, общие слова. Читай про TRegistry


 
BioStaR   (2008-08-11 13:28) [13]

Значит тебе это не нужно, если ты удалишь, а для тех кому нужно не удалят! Tregistry, TRegIniFile я изучал! Мне просто, если есть нужна команда и всё.


 
Denis__ ©   (2008-08-11 14:28) [14]


> Tregistry, TRegIniFile я изучал! Мне просто, если есть нужна
> команда и всё.

Ну и что тебе не понятно?


 
Ega23 ©   (2008-08-11 14:35) [15]


> Мне просто, если есть нужна команда и всё.


Ну и вперед!


 
Denis__ ©   (2008-08-11 14:53) [16]

var
  Reg  : TRegistry;
  Path : String;
begin
  Reg := TRegistry.Create;
  try
     with Reg do
     begin
        RootKey := HKey_XXXX;
        OpenKeyReadOnly("Ключ");
        Path := ReadString("Параметр");
        Free;
     end;
  except
     Reg.Free;
  end;
  if FileExists(Path) then
  begin
     ShellExecute(handle,nil,pChar(Path),"","",SW_SHOWNORMAL);).  
  end;
end;


 
Ega23 ©   (2008-08-11 14:55) [17]

А почему не так:

Reg := TRegistry.Create;
try
 try
    with Reg do
    begin
       RootKey := HKey_XXXX;
       OpenKeyReadOnly("Ключ");
       Path := ReadString("Параметр");
    end;
 except
   .......
 end;
finally
  Reg.Free;
end;


 
Denis__ ©   (2008-08-11 14:58) [18]


> Ega23 ©   (11.08.08 14:55) [17]

Ну, не знаю... А что, есть смысл? Объясните, плиз.


 
Ega23 ©   (2008-08-11 15:01) [19]


> Ну, не знаю... А что, есть смысл? Объясните, плиз.


Ну, например, исключение в деструкторе.


 
Denis__ ©   (2008-08-11 15:05) [20]

А когда такое может произойти?
Может ли быть иключение в конструкторе?


 
Anatoly Podgoretsky ©   (2008-08-11 15:23) [21]

> Denis__  (11.08.2008 15:05:20)  [20]

Не важно писать надо правильно, а как правильно тебе показали.


 
Denis__ ©   (2008-08-11 15:31) [22]


> Не важно писать надо правильно, а как правильно тебе показали.

Я ж неспорю:) Я понять хочу. У меня например возникла мысль что тогда вот так надо
try
 Reg := TRegistry.Create;
 try
    try
      with Reg do
      begin
      ....
      end;
    finally
      Reg.Free;
    end;
 except
    //Ошибка в деструкторе
 end;
except
 //Ошибка в конструкторе
end;

Интуиция говорит, что так не надо, прошу пояснить:)


 
Ega23 ©   (2008-08-11 15:38) [23]


> Интуиция говорит, что так не надо, прошу пояснить:)


Почему? В целом - не надо. Но вот видел код, в котором в конструкторе возбуждалось исключение. И в том случае писать надо было действительно так:
try
 Create
 try
   .....
 finally
   Free;
 end;
except
 .....
end


просто в конструкции
Create;
try
 ......
finally
 Free;
end;


деструктор будет по-любому вызван. И если вдруг там получится исключение, то ты его перехватишь на более высоком уровне.

А в твоём случае (если исключение в деструкторе), ты на это дело 2 раза подряд натыкаешься, что не есть хорошо.


 
Anatoly Podgoretsky ©   (2008-08-11 15:41) [24]


> У меня например возникла мысль что тогда вот так надо

Данный код для потоковых серверов. Если убрать внешний try то конструкция должна быть такая

Create...
try
  try
    ...
  except
    ...
  end;
finally
  Free;
end;


 
Denis__ ©   (2008-08-11 15:44) [25]


> Ega23 ©   (11.08.08 15:38) [23]

Спасибо


 
Denis__ ©   (2008-08-11 15:48) [26]


> Create...
> try
>   try
>     ...
>   except
>     ...
>   end;
> finally
>   Free;
> end;

Опять непонятки. А если в деструкторе возникнет исключение?


 
Ega23 ©   (2008-08-11 15:51) [27]


> Опять непонятки. А если в деструкторе возникнет исключение?


Оно будет перехвачено вышестоящим обработчиком.

Ты пойми: не все исключения надо обязательно перехватывать.  :)


 
Denis__ ©   (2008-08-11 15:57) [28]


> Оно будет перехвачено вышестоящим обработчиком.

Это каким? Я что-то сосвем запутался. Что вы называете вышестоящим?:)

> Ты пойми: не все исключения надо обязательно перехватывать.

Можно поподробнее?


 
Anatoly Podgoretsky ©   (2008-08-11 15:58) [29]


> А если в деструкторе возникнет исключение?

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


 
Anatoly Podgoretsky ©   (2008-08-11 16:01) [30]


> Можно поподробнее?

Большинство исключение передаются выше, это принципы их правильного использования, ошибка не должна скрываться, а должна доходить до того, до кого надо. В примере ее обязан обработать вышестоящий обработчик и именно он должен узнать, что это произошло.


 
Denis__ ©   (2008-08-11 16:02) [31]


> , то управление будет передано вышестоящиму обработчику

Вышестоящий это какой? а том примере покажите, а? Выделите как-нибудь:)


 
Ega23 ©   (2008-08-11 16:04) [32]


> Вышестоящий это какой? а том примере покажите, а? Выделите
> как-нибудь:)


Это Application.OnException. А если его нет, то покажут тебе окошко с сообщением об ошибке, и работа дальше продолжится.


 
Denis__ ©   (2008-08-11 16:08) [33]


> Это Application.OnException. А если его нет, то покажут
> тебе окошко с сообщением об ошибке, и работа дальше продолжится.
>

Фух.. Спасибо. Наконец-то:)А то я уж мозг напрягаю, что ж за вышестоящий.


 
Anatoly Podgoretsky ©   (2008-08-11 16:19) [34]

> Denis__  (11.08.2008 16:02:31)  [31]

Это выше create finally end;


 
Anatoly Podgoretsky ©   (2008-08-11 16:28) [35]

> Denis__  (11.08.2008 16:08:33)  [33]

Он пошутил, но это может быть и он.



Страницы: 1 вся ветка

Текущий архив: 2008.09.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.016 c
15-1217504410
Правильный$Вася
2008-07-31 15:40
2008.09.21
как перевести на английский


2-1218300547
Putnik
2008-08-09 20:49
2008.09.21
Сохранение массива в БД MS Access


2-1218434218
Mops
2008-08-11 09:56
2008.09.21
TWebbrowser и IE


2-1218566528
gear
2008-08-12 22:42
2008.09.21
Как программно передвинуть каретку в TEdit?


2-1218506684
Abcdef123
2008-08-12 06:04
2008.09.21
Проблемы перевода проекта с Delphi6 на Delphi 2007