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

Вниз

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

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

Наверх





Память: 0.55 MB
Время: 0.009 c
15-1251775427
Jeyson
2009-09-01 07:23
2009.11.01
Консоль


15-1251738482
Pavia
2009-08-31 21:08
2009.11.01
Изменения правил Русского языка.


15-1251885076
boriskb
2009-09-02 13:51
2009.11.01
40 лет интернету


15-1251923407
Юрий
2009-09-03 00:30
2009.11.01
С днем рождения ! 3 сентября 2009 четверг


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский