Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

Запуск 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.006 c
2-1218111245
Ябеда
2008-08-07 16:14
2008.09.21
Работа с TCanvas из наследника класса TThread


4-1197096509
happy
2007-12-08 09:48
2008.09.21
Пост запрос


15-1217577898
Ega23
2008-08-01 12:04
2008.09.21
переменные окружения и CGI в Delphi


15-1215974323
KilkennyCat
2008-07-13 22:38
2008.09.21
ПитерМастакПати


2-1218444021
Dmitry S
2008-08-11 12:40
2008.09.21
Массив значений в параметре





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский