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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2009, 17:17   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Как то неправильно запускается bat

Написал так:
Код:
WinExec('1.bat', 0);
Но запускается как-то не так и файл res не создается. (в батнике записал: brcc32.exe ICON.rc)

Запускаю от руки - все нормально создается!

Пробовал ShellExecute:
Код:
ShellExecute(Handle, 'open', PChar(ExtractFilePath(paramstr(0))+'1.bat'), nil, nil, SW_SHOWNORMAL);
Результат тот же!

Пробовал WinExec(полный путь, SW_NORMAL); - Тот же эффект.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 07.11.2009, 17:24   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

попробовал
Код:
WinExec('1.bat',SW_hide);
и
WinExec('1.bat',SW_show);
создается файл ресурсов
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 07.11.2009 в 17:26. Причина: ShellExecute тоже работает...
raxp вне форума Ответить с цитированием
Старый 07.11.2009, 18:02   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
procedure TForm1.Button4Click(Sender: TObject);
var l:TStrings;
I:Integer;
begin
Memo1.Lines.SaveToFile(S3+'\'+'ICON.rc');
l:=TStringList.Create;
l.Add('brcc32.exe ICON.rc');
l.SaveToFile(S3+'\'+'1.bat');
l.Free;
WinExec(PAnsiChar(S3+'\'+'1.bat'), SW_NORMAL);
{ShellExecute(Handle, 'open', PChar(ExtractFilePath(paramstr(0))+'1.bat'), nil, nil, SW_SHOWNORMAL);}
{DeleteFile(S3+'\'+'1.bat'); }
end;
И не работает. И краткий путь тоже пробовал

P.S.
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
GetDir(0,S3);
List := TStringList.Create;
end;
P.P.S. Ходил F7 - Все значения правильны.
P.P.P.S. И даже консоль появляется.

НАШЕЛ!!!! Поставил паузу в батнике и увидел, что он копается в какой то левой директории. Буду исправлять. Пока не клозьте, плиз.

Проблема в том, что батник получает директорию, в которой я копался при помощи OpenDialog. Как дать ему правильную директорию, если она у меня хранится в S3:String?
Если непонятно - поясню - после приглашения командной строки рабочей папкой является та, в которой я копался в openDialog. Мне нужно, чтобы рабочей папкой была та, в которой находится программа.

Попробовал перед командой компиляции приписать в батник следующее:
Код:
l.Add('Prompt '+S3);
Но появилась неожиданная трудность: русские символы в пути некорректно отобразились и - как следствие никакой корректной компиляции. Как сделать соответствие кодировок?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось mihali4; 07.11.2009 в 19:06.
Alex Cones вне форума Ответить с цитированием
Старый 07.11.2009, 18:23   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что-то вы тут опять мудрите...
Вот так у меня все прекрасно работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var l:TStrings;
begin
Memo1.Lines.SaveToFile(ExtractFilePath(paramstr(0))+'\'+'ICON.rc');
l:=TStringList.Create;
l.Add('brcc32.exe '+ExtractFilePath(paramstr(0))+'\'+'ICON.rc');
l.SaveToFile(ExtractFilePath(paramstr(0))+'\'+'1.bat');
l.Free;
WinExec(PAnsiChar(ExtractFilePath(paramstr(0))+'\'+'1.bat'), SW_NORMAL);
end;

Последний раз редактировалось mihali4; 07.11.2009 в 18:26.
mihali4 вне форума Ответить с цитированием
Старый 07.11.2009, 18:27   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Так будет прекрасно работать!
А если перед этим вызвать OpenDialog и перейти в какую нибудь дикторию и вызвать там файл - директория после приглашения в батнике будет та, в которой копался OpenDialogom.

ИМХО Нужно как-то извернуться и запустить батник так, чтобы у него рабочей директорией была та, в которой находится программа... Вот только как?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось mihali4; 07.11.2009 в 18:57.
Alex Cones вне форума Ответить с цитированием
Старый 07.11.2009, 18:59   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
А если перед этим вызвать OpenDialog и перейти в какую нибудь дикторию и вызвать там файл - директория после приглашения в батнике будет та, в которой копался OpenDialogom.
Враки!
Вот совершенно нормально работающий код - пишет ICON.rc в каталог с проектом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var l:TStrings;
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
Memo1.Lines.SaveToFile(ExtractFilePath(paramstr(0))+'\'+'ICON.rc');
l:=TStringList.Create;
l.Add('brcc32.exe '+ExtractFilePath(paramstr(0))+'\'+'ICON.rc');
l.SaveToFile(ExtractFilePath(paramstr(0))+'\'+'1.bat');
l.Free;
WinExec(PAnsiChar(ExtractFilePath(paramstr(0))+'\'+'1.bat'), SW_NORMAL);
end;
end;
хотя в OpenDialog была выбрана совершенно другая папка...

То Alex Cones
Вы что, кнопкой "Правка" пользоваться не умеете?
Что вы лепите посты по нескольку штук подряд?

Последний раз редактировалось mihali4; 07.11.2009 в 19:08.
mihali4 вне форума Ответить с цитированием
Старый 07.11.2009, 19:06   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Враки, говорите? А как Вам это:?
Код:

var
  Form1: TForm1;
  S3:String;
  List:TStringList;
implementation


procedure TForm1.Button1Click(Sender: TObject);
Var
S,S2,S4:String;
begin
OpenDialog1.Execute;
S2:=OpenDialog1.FileName;
S2:=S2[Length(S2)-2]+S2[Length(S2)-1]+S2[Length(S2)];
If S2 = 'ico' Then S := 'ICON' Else
If S2 = 'cur' Then  S := 'CURSOR' Else
If S2 = 'bmp' Then S := 'BITMAP'Else
S := 'LOADONCALL';
S4 := OpenDialog1.FileName;
While Pos('\',S4)<>0 do
 Begin
  Delete(S4,1,Pos('\',S4));
 End;
List.Add(S4);
Memo1.Lines.Add('FILE'+ IntToStr(Memo1.Lines.Count + 1) + ' ' + S + ' '+ S4);
CopyFile(PAnsiChar(OpenDialog1.FileName), PAnsiChar(S3+'\'+S4), False);
end;


procedure TForm1.Button4Click(Sender: TObject);
var l:TStrings;
I:Integer;
begin
Memo1.Lines.SaveToFile(ExtractFilePath(paramstr(0))+'ICON.rc');
l:=TStringList.Create;
l.Add('brcc32.exe '+ExtractFilePath(paramstr(0))+'ICON.rc');
l.Add('Pause');
l.SaveToFile(ExtractFilePath(paramstr(0))+'1.bat');
l.Free;
WinExec(PAnsiChar(ExtractFilePath(paramstr(0))+'1.bat'), SW_NORMAL);

{ShellExecute(Handle, 'open', PChar(ExtractFilePath(paramstr(0))+'1.bat'), nil, nil, SW_SHOWNORMAL);}
{DeleteFile(S3+'\'+'1.bat'); }

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
GetDir(0,S3);
List := TStringList.Create;
end;

end.
На форме: OpenDialog1, батон1 и батон4, мемо1, жмакните на батон 1, выберите файл, потом на батон4. В батнике БУДЕТ ПУТЬ, КОТОРЫЙ БЫЛ В ОПЕНДИАЛОГ!

P.S. Сорри за даблпостинг - эмоции.

P.P.S. Да все файлы пишутся в правильные директории, неправильная директория появляется в приглашении DOS в батнике.

P.P.P.S. Если говорю туманно - вот мои действия по шагам:

1) Я открываю опендиалог и выбираю файл:

2) Далее я запускаю батник:

Путь в батнике - тот, который был в опендиалоге, несмотря на то, что программа находится в другой папке:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 07.11.2009 в 19:20.
Alex Cones вне форума Ответить с цитированием
Старый 07.11.2009, 19:24   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Да все файлы пишутся в правильные директории, неправильная директория появляется в приглашении DOS в батнике.
Тоже враки!
Вот картинка:
Снимок1.GIF
Как видите - в батник пишется лишний слэш.

Последний раз редактировалось mihali4; 07.11.2009 в 19:37.
mihali4 вне форума Ответить с цитированием
Старый 07.11.2009, 19:31   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

так... попробуй после использования opendialog поставить принудительно рабочую директорию
Код:
setCurrentDirectory()
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.11.2009, 19:32   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Спасибо! CurrentDirectory помогла!
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создавать .bat файлы? jojahti Свободное общение 21 24.09.2009 21:29
The Bat как настроить чтобы работал после trial BEYLERBEYİ2009 Софт 9 06.03.2009 09:19
Написание *.bat .. как? Stema Общие вопросы по программированию, компьютерный форум 6 09.04.2008 15:26
как реализовать в программе, запуск bat файлов? SereJa1020 Общие вопросы Delphi 1 06.03.2008 18:10