Форум: "Начинающим";
Текущий архив: 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