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

Вниз

не запускается скрипт   Найти похожие ветки 

 
cyberspy85 ©   (2009-09-14 22:44) [0]

Необходимо запустить скрипт с параметром (полное имя файла)
var
CurrentFilename, ScriptString: string;

//ArgMessages.js скрипт получающий в качестве параметра строку
//CurrentFilename
ScriptString:=  "Wscript.exe ArgMessages.js " + CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
не хочет работать, а вот если в winexec указывать явно:
winexec("Wscript.exe ArgMessages.js Myfile.txt ", SW_SHOWNORMAL), то работает нормально.
Подскажите пожалуйста, что нужно сделать чтобы скрипт запускался а в качестве параметра принимал переменую с именем файла.


 
TIF ©   (2009-09-15 03:31) [1]

> (полное имя файла)

> Myfile.txt

Что есть полное имя файла? Случайно не с учётом ли пути до файла?

То есть что передаётся в CurrentFilename? "Myfile.txt" или "C:\12 и 34\Myfile.txt"?


 
cyberspy85 ©   (2009-09-15 07:25) [2]

да именно так, с учетом пути до файла с:\.....\Myfile.txt


 
AIK ©   (2009-09-15 08:36) [3]


>... а в качестве параметра принимал переменую с именем файла.


Осмелюсь предположить что твоя ошибка в том что передавая имя файла с путями ты забываешь передавать его в кавычках так как пути обычно содержат


 
AIK ©   (2009-09-15 08:45) [4]


> пути обычно содержат

... пробелы :)


 
cyberspy85 ©   (2009-09-15 10:02) [5]

нет все с кавычками: т.е.
CurrentFilename:= "C:\....\Myfile.txt"
сам скрипт не запускается
ScriptString:=  "Wscript.exe ArgMessages.js " + CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
а вот если в winexec указывать явно:
winexec("Wscript.exe ArgMessages.js Myfile.txt ", SW_SHOWNORMAL), то работает нормально.(извиняюсь за повтор)


 
brother ©   (2009-09-15 10:05) [6]

> ScriptString:=  "Wscript.exe ArgMessages.js " + CurrentFilename;

попробуй: ScriptString:=  ""Wscript.exe ArgMessages.js " + CurrentFilename + "";


 
cyberspy85 ©   (2009-09-15 10:05) [7]

что-то видимо теряется при преобразовании PAnsiChar(ScriptString), пробовал StrNew тоже самое


 
brother ©   (2009-09-15 10:06) [8]

> PAnsiChar(ScriptString),

смущает


 
cyberspy85 ©   (2009-09-15 10:13) [9]

""Wscript.exe ArgMessages.js 12345 32424" + CurrentFilename+";
ну так вообще ощибку выдает
[DCC Error] Unit1.pas(603): E2038 Illegal character in input file: """ (#$22)


 
AIK ©   (2009-09-15 10:18) [10]


> cyberspy85 ©   (15.09.09 10:02) [5]
> нет все с кавычками: т.е.
> CurrentFilename:= "C:\....\Myfile.txt"


Я имел в виду:
CurrentFilename:= ""C:\....\Myfile.txt""


 
cyberspy85 ©   (2009-09-15 10:29) [11]

попробовал CurrentFilename:= ""C:\....\Myfile.txt""
не то, тут сам скрипт не запускается даже если убрать CurrentFilename, для начала бы сделать чтоб скрипт запускался, потом с параметрами пробовать


 
Anatoly Podgoretsky ©   (2009-09-15 10:30) [12]

> cyberspy85  (14.09.2009 22:44:00)  [0]

Мы чего будем гадать, или ты приведешь результат в ScriptString
Я как понимаю, что ты проверяешь разные строки вывода, в одном случае далеко не "Wscript.exe ArgMessages.js Myfile.txt "


 
Anatoly Podgoretsky ©   (2009-09-15 10:31) [13]

> cyberspy85  (14.09.2009 22:44:00)  [0]

Кстати WinExec используть или ламеры, или новички, которые справку не читают из принципа.


 
Anatoly Podgoretsky ©   (2009-09-15 10:34) [14]


> CurrentFilename:= "C:\....\Myfile.txt"

Опять ерунда написана, сомневаюсь, что есть папка с именем ....


 
cyberspy85 ©   (2009-09-15 11:21) [15]


> Кстати WinExec используть или ламеры, или новички, которые
> справку не читают из принципа.


ламеры не ламеры ветка (начинающим) сюда и пишу,  пробовал ShellExecute(Aplication.Handle,"open","Wscript.exe ArgMessages.js 12345 32424",nil,nil, SW_NORMAL); CreateProcess < вообще не запускается скрипт
работает только winexec

> Мы чего будем гадать, или ты приведешь результат в ScriptStringЯ
> как понимаю, что ты проверяешь разные строки вывода, в одном
> случае далеко не "Wscript.exe ArgMessages.js Myfile.txt
> "

Извини не совсем понял что хотел сказать, в целом задача такая:
1. Определяется имя файла
2. Формируется строка запуска скрипта,и это имя предается в качестве параметра
3. Строка запуска подставляется через переменную в winexec
4. Запускается скрипт (и импортирует этот файлик в другое приложение посредством Automation)

> > CurrentFilename:= "C:\....\Myfile.txt"Опять ерунда написана,
>  сомневаюсь, что есть папка с именем ....
C:\.... смущает, ну понятно что путь просто вместо него многоточие чтоб меньше писать и файл Myfile.txt на месте


 
sniknik ©   (2009-09-15 11:51) [16]

> Извини не совсем понял что хотел сказать, в целом задача такая:
> 1. Определяется имя файла
> ...
да плевать что там у тебя определяется, раз оно не работает то описание ЧТО ты делаешь абсолютно бессмысленно без того КАК ты это делаешь.

> ну понятно что путь просто вместо него многоточие
кому понятно?

> чтоб меньше писать
а объяснять потом и запутывать/путаться ответах авторы которых тебя не понимают? плюс такие которые попытаются объяснить (я например), что в итоге может свести всю ветку к просто флуду.
неужели это лучше чем сразу привести ТО ЧТО ЕСТЬ, а не то, о чем нужно догадываться (и каждого в догадках будет разный результат).

неужели нельзя сразу показать значение переменной, и вообще не запутывать кучей переменных? написать например вот так -

winexec("Wscript.exe ArgMessages.js C:\Myfile.txt ", SW_SHOWNORMAL);
работает

var
ScriptString: string;
...
ScriptString:=  "Wscript.exe ArgMessages.js C:\Myfile.txt ";
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
нет

или раз уж хочется с "пятой ногой"
var
CurrentFilename, ScriptString: string;
...
CurrentFilename:= "C:\Myfile.txt ";
ScriptString:=  "Wscript.exe ArgMessages.js "+CurrentFilename;
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
нет

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

p.s. хотя что то мне подсказывает, если этот вопрос задать правильно, то он как бы сам собой решится...


 
cyberspy85 ©   (2009-09-15 11:58) [17]

так... тому кто понял по существу вопроса будут предложения?


 
clickmaker ©   (2009-09-15 12:20) [18]

> Кстати WinExec используть или ламеры, или новички

а что тут ламерского?
все равно в итоге createprocess вызовется, а кода меньше, если нужно только запустить без всяких пайпов и т.п.


 
Anatoly Podgoretsky ©   (2009-09-15 13:23) [19]

> cyberspy85  (15.09.2009 11:21:15)  [15]

> Кстати WinExec используть или ламеры, или новички, которые
> справку не читают из принципа.

Теперь не читаешь справку по ShellExecute


 
Anatoly Podgoretsky ©   (2009-09-15 13:25) [20]

> cyberspy85  (15.09.2009 11:58:17)  [17]

> по существу вопроса будут предложения?

Существа нет.


 
Игорь Шевченко ©   (2009-09-15 13:26) [21]

Anatoly Podgoretsky ©   (15.09.09 10:31) [13]

Ну вот взял и обозвал.


 
Anatoly Podgoretsky ©   (2009-09-15 13:26) [22]

> clickmaker  (15.09.2009 12:20:18)  [18]

Ну не ожидал я от тебя такого аргумента "в итоге createprocess вызовется", гораздо сильнее аргумент против, что "данная функция оставлена для совместимости с Win16"


 
Anatoly Podgoretsky ©   (2009-09-15 13:30) [23]


> Игорь Шевченко ©   (15.09.09 13:26) [21]

А я сейчас еще как обзовусь "а кода меньше" это для ленивых,

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


 
cyberspy85 ©   (2009-09-15 16:47) [24]

По моему понял в чем проблема, посмотрим два варианта
Вариант 1. работает
winexec("Wscript.exe", SW_SHOWNORMAL);

код CPU
Unit1.pas.608: winexec("Wscript.exe", SW_SHOWNORMAL);
004C9240 6A01                 push $01
004C9242 683C944C00       push $004c943c  < указатель на строку
004C9247 E8CCFCF3FF       call WinExec         |
                                                              |
память<--------------------------------------
$004c943c  72637357   2E747069  Wscript.   < строка  из байтовых символов
$004c9444  00657865   8B575653  exe.SVW. <

Вариант 2. не работает
winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);

код CPU
Unit1.pas.608: winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
004C9240 6A01              push $01
004C9242 8B45F0           mov eax,[ebp-$10]
004C9245 50                 push eax                < указатель на строку
004C9246 E8CDFCF3FF    call WinExec              |
                                                                |
память<--------------------------------------
004C9424  00730057  00720063  W.s.c.r.  < строка двухбайтовых символов
004C942С  00700069  002E0074  i.p.t...

короче говоря сформированную строку ScriptString надо преобразовать в
строку однобайтовых символов


 
sniknik ©   (2009-09-15 17:30) [25]

да, рассмотрим вариант
procedure TForm1.Button1Click(Sender: TObject);
var
ScriptString: string;
begin
 ScriptString:=  "Wscript.exe";
 winexec(PAnsiChar(ScriptString), SW_SHOWNORMAL);
end;
работает! и строка в CPU передается однобайтная.

она у тебя, что объявлена как вайдстринг? а здесь приведено другое, или получаешь/формируешь ее в таком виде хитрым индейским способом, и здесь это вообще не приведено, а потом чудеса и происходят...

в итоге
> описание ЧТО ты делаешь абсолютно бессмысленно без того КАК ты это делаешь.
+1
это и было "существо вопроса" в ветки, если кто не понял.


 
cyberspy85 ©   (2009-09-15 17:36) [26]


> она у тебя, что объявлена как вайдстринг? а здесь приведено
> другое, или получаешь/формируешь ее в таком виде хитрым
> индейским способом, и здесь это вообще не приведено, а потом
> чудеса и происходят...

string и никак иначе


 
cyberspy85 ©   (2009-09-15 17:56) [27]

запустил на делфи 7 все отлично работает, в RAD 2009 объявляю string а воспринимается как wide


 
clickmaker ©   (2009-09-15 17:57) [28]

> в RAD 2009 объявляю string а воспринимается как wide

ну да. там по дефолту так и должно быть


 
cyberspy85 ©   (2009-09-15 18:11) [29]

в опциях проекта  Compiling нужно переключить
Long string by default: False


 
sniknik ©   (2009-09-15 19:13) [30]

> запустил на делфи 7 все отлично работает, в RAD 2009 объявляю string а воспринимается как wide
теперь смотрим на вопрос
> не запускается скрипт [D7, XP, 2003]
и кого должно телепатически "пробить", что написав D7 подразумевается RAD 2009?

а то что стринг в 2009 в связи с ее юникодностью уже и не стринг вовсе тут уже обсуждалось и знают про это многие.

в итоге вопрос - сплошные недомолвки, урезания инфы из ложной скром... желания сократить (смысл?) + как оказывается банальная лож.
хорошая почва для чудес.


 
cyberspy85 ©   (2009-09-15 19:23) [31]

Удалено модератором
Примечание: Без наездов давай, ответы тебе нужны, а не нам.


 
TIF ©   (2009-09-16 06:01) [32]

> ну нет там RAD STUDIO и WIN 2008

Написать версию Delphi и Windows в тексте, не используя галочки, не сработала фантазия? Дописать это отдельным сообщением - тоже...

> Жаль , я не знал

Пора что-то менять в жизни. Юникод - самая главная грандиозная новинка в D2009. Пройти мимо этого - гм...
Имеет смысл срочно ознакомиться с описанием продукта, чтобы не столкнуться лбом о стену препятсвий, которые и не препятствия вовсе, а новые возможности :)

> Long string by default: False

%-\


 
cyberspy85 ©   (2009-09-16 07:46) [33]

В общем все заработало на ура, помощи никакой не добился, разобрался сам


 
sniknik ©   (2009-09-16 09:10) [34]

> помощи никакой не добился
о какой помощи может быть речь если никто кроме тебя НЕ ЗНАЕТ реальной картины происходящего... твоими же усилиями. всех кто мог помочь ты "кормишь" байками на тему "все правильно делаю, а оно вот такое хреновое не хочет работать". а все попытки "свернуть тебя"  на выставление этой самой реальной картины на всеобщее обозрение тобой же отвергаются как "несущественные для вопроса".

тебе нужен форум телепатов... хотя, они могут не знать дельфи. :)


 
Anatoly Podgoretsky ©   (2009-09-16 11:36) [35]

> cyberspy85  (15.09.2009 17:56:27)  [27]

Потребовалось 27 сообщений, что бы определить, что запускается на Д2009


 
Anatoly Podgoretsky ©   (2009-09-16 11:36) [36]

> cyberspy85  (15.09.2009 17:56:27)  [27]

Не воспринимается как wide, а воспринимается как UnicodeString


 
Anatoly Podgoretsky ©   (2009-09-16 11:39) [37]


> В общем все заработало на ура, помощи никакой не добился,
>  разобрался сам

Ну ну



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

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

Наверх




Память: 0.57 MB
Время: 0.017 c
2-1252659912
Mery
2009-09-11 13:05
2009.11.01
TIBQuery. Выполнение iif в запросе


15-1251979701
stas
2009-09-03 16:08
2009.11.01
Размер скачиваемого файла


15-1251750605
Юрий
2009-09-01 00:30
2009.11.01
С днем рождения ! 1 сентября 2009 вторник


3-1229078488
Nik
2008-12-12 13:41
2009.11.01
отпределить тип колонки


6-1209058825
keymaster
2008-04-24 21:40
2009.11.01
Авторизация на FTP через AD