Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопрос о запуске из Pascal-программы Net.exe
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Касатка
blink.gif Я замучался с попытками запустить из Pascal-программы модуль Windows NET.EXE. Мне это нужно для написания проги для сканирования расшареных дисков в Интернете. Нужно запустить ДОС-команду "net use <имя диска>: \\<ip-адрес>\C><имя файла>". Я подставляю эту команду в процедуру EXEC: EXEC('net','use '+'<команда>'), EXEC('net use','<команда>'), EXEC(getenv('COMSPEC'),'net use '+'<команда>'), и.т.д. , но программа net с командной строкой (и без) не запускается, не выводит сообщений и не создает файла на моем диске, хотя в самой ДОС команда работает корректно. Кто подскажет и покажет, в чем тут дело (среда-BP7, ОС-WIN 98+Far)?
SKVOZNJAK
Нужно сохранить вектор прерывания. Поищи по форуму, этот оператор обсуждался. Но есть ещё один способ запуска прог, расширенный, но из основной проги на время придётся выйти. Прога запускается из *.ВАТ файла, в следущие строки батника вписываются нужные операторы, или батник заменяется на другой. Основная прога завершает работу, выполняется следущая строка батника, следущая опять запускает основную прогу, состояние восстанавливаешь по сохранке. Если запускать приходится слишком часто, и батник чересчур вырос, запускаешь из него второй батник который заменяет первый на укороченный и запускает его.
В винде есть дополнительный оператор для батника START имяокна запускаемыйфайл Это позволяет запустить параллельный процесс. Тогда, если основная прога запускалась командой старт, из неё можно не выходить. Нужно лишь написать программу тормоз, которая будет выполняться до тех пор, пока из основной не поступит команда (например через запись в файле или создание файла - выключаемая прога перед прекращением работы его сотрёт smile.gif), тогда начнёт выполняться следущий оператор батника. Вот как при помощи батника запускается игрушка "клизма"
Код

echo off
c:
chdir C:\Program Files\Cheating-Death
start "qqq" /min cdeath.exe
chdir C:\Program Files\Valve
hl.exe -game cstrike
cls

Сложно только закрыть ненужное окно. Можно заменять в батнике только одну строку устроив бесконечный цикл на GOTO

Код

START "assd" prog.exe
:q
tormoz.exe
выполняемый оператор
goto q
:vixod

Вариантов использования батника много, чем то он напоминает бейсиковые пусковые файлы.
Касатка
blink.gif Векторы я сохранял (вызывал Swapvectors до и после Exec'а), также пробовал указать в начале проги директиву вроде {$M 8000,0,8000} (округлил до 8000 b размер экзешника проги). Забыл сказать, что при использовании команды с использованием "COMSPEC", в начале ДОС-команды писал "/C ". Что касается способа с *.bat-файлом, то что-то это слишком сложно и наворочено. Может все же есть способ сделать все в самой проге? Например, как-то раз я написал процедуру для автоотключения компа, где Exec'ом вызывались другие модули Windows и она сразу заработала. Привожу листинг:

Function Autostop:Boolean;
Begin
Exec('C:\WINDOWS\RUNDLL32.EXE','shell32.dll,SHExitWindowsEx 1')
End;

Еще один вопросик.
Я хочу защитить файл-базу данных одной проги, так чтобы другие могли свободно пользоваться этой прогой (без базы она не работает), на компе, где она установлена, не вводя паролей, не запуская дешифровщики и пр., но не могли ее (хотя бы базу) скопировать или перенести на болванки, стримеры, дискеты, через сеть и.т.д. Как это сделать?
hiv
Цитата(Касатка @ 23.05.05 4:36)
Еще один вопросик.
Я хочу защитить файл-базу данных одной проги, так чтобы другие могли свободно пользоваться этой прогой (без базы она не работает), на компе, где она установлена, не вводя паролей, не запуская дешифровщики и пр., но не могли ее (хотя бы базу) скопировать или перенести на болванки, стримеры, дискеты, через сеть и.т.д. Как это сделать?

Защищать нужно программу, через которую вводятся и отборажаются данные, а не файл-базу. А сама файл-база может быть только зашифрована. Лучше защиты чем HASP ключи для программ пока еще не придумано. Об этом можно почитать на www.aladdin.ru
Ну а если по минимуму - то нужно паролить установку программы и при установке программы привязываться к железу.

ЗЫ: Я бы не стал расшаривать диски windows и выставлять ее в интернет, у меня без расшареных дисков windows продержался только 5 минут, после этого перестал работать поиск в проводнике и устранили это "недоразумение" только полной перестановкой системы. Минимум надо ставить файервол! И ни в коем случае не расшаривать никаких дисков - если не хочешь переставлять windows всю оставшуюся жизнь!
volvo
Цитата(Касатка @ 23.05.05 2:48)
программа net с командной строкой (и без) не запускается, не выводит сообщений и не создает файла на моем диске

Как завершается процесс? Что DOSError возвращает, проверял?
Касатка
blink.gif Тогда поподробнее объясните, как паролить установку и привязывать инсталлированную прогу к конкретному компу (назовите конкретные готовые утилиты или дайте алгоритм, чтобы я сам такие написал ). Я не профессионал и до этого с такими операциями не сталкивался. Использование HASP-ключей и других непрограммных средств исключено.
Также прошу все-таки дать более ясный ответ на мой первый вопрос, насчет NET.EXE (НУЖНО СРОЧНО!).

P.S. После этого сообщения проверил. Я попробовал выполнить команду "EXEC(<net>,' /? C><имя файла>')". Когда я указывал просто имя программы, без расширения, DOSerror писал ошибку N 2 (не найден файл). Тогда указал полный путь к net.exe, и писалось об ошибке N 8 (не хватает памяти). Видимо, нужно правильно распределить память директивой {$M х,х,х}? Как именно?
volvo
Вообще-то значение DOSError = 8 говорит о необходимости уменьшить 3-ий параметр в {$M ...}. Попробуй уменьшать его до тех пор, пока памяти не станет достаточно...

Цитата(Pascal Help)
Exec (procedure)    (Dos unit)
Executes a specified program with a specified command line.

Declaration:
  procedure  Exec(Path, CmdLine: string);

Remarks:
Errors are reported in DosError. When compiling a program that uses Exec, reduce the "maximum" heap size; otherwise, there won't be enough memory (DosError = 8).


А вообще-то я попробовал бы {$M 8000, 0, 0}
Касатка
blink.gif Grand Merci Volvo за совет. Теперь команды выполняются (как говорится, все гениальное просто) и проблема на 90% решена. Однако пока не создается на диске файл с сообщениями модуля NET.EXE, а вместо этого сообщения выводятся на экран. Почему?
Касатка
blink.gif Благодарю hiv за информацию. Но все-таки, кто нибудь ответит на мой последний вопрос, относительно создания файла отчета работы внешней программы? Если я уже всех достал, то обещаю что после ответа на этот вопрос больше беспокоить не буду. А кроме того, вышлю, если кому-то будет интересно, готовую прогу. Прошу извинить за резкость, но сейчас для меня это-жизненно важный вопрос.
volvo
Ну, ты бы код-то свой показал, как ИМЕННО ты это пытаешься делать... У нас тут с телепатами проблема...
Только не надо "примерно...", "как-то так..."
Я ведь тоже могу сказать, "как-то так..."
Касатка
blink.gif Да хотя бы сделать так, чтобы заработало вот это:
Код
{$M 5000,0,0}
Uses crt,dos;
Var
 i,a,b:byte;
 disk,prog,comstr,ip,s,s3,s4,dstr,LohDir:String;
 {disk:char;}
 f2,f3:text;
 p:boolean;
 j:integer;
 atr:word;
BEGIN
 clrscr;
 prog:='C:\WINDOWS\NET.EXE';
 comstr:='use '+'J'+': \\'+'213.67.87.78'+'\C>messfile';
 swapvectors;
 EXEC(prog,comstr);
 swapvectors;
 readln;
END.
Это тестовая прога, а в той, к-ую я напишу, периодически вызывается тот же NET, только с другими параметрами ком. строки. Сразу предупрежу, что идея не моя (будь у меня диплом программиста придумал бы алгоритм не хуже). Правда в том источнике, где я увидел алгоритм, предлагалось писать на Quik-Барсике, к-ым я не владею + я немного модернизировал алгоритм.
ClrScr и модуль Crt тут не причем (проверял).
hiv
Я не знаю как это реализовывать на BP7, а в Delphi это выглядит так:
Запуск программ с передачей консольного ввода и чтением вывода
Если используешь 32-битный компилятор то переделать код не составит труда, т.к. в приведенном примере в основном используются функции Windows API.
Касатка
blink.gif Все-таки нужно на BP7. Дельфи у меня есть, но у меня слишком мало места для установки и он глючит. А еще код получается диких размеров.
Romtek
Касатка, а не проще ли создать BAT-файл с таким содержимым? smile.gif
Код
NET use J: \\213.67.87.78\C>messfile
и запускай его, сколько душа пожелает...
А для применения разных параметров к нему можно сделать так:
Код
net use %1: \\%2\C>%3

Запускать тогда так:
x.bat j 213.67.87.78 messfile
Касатка
:p2: O'Key, попробую. Но почему же в этом журнале предлагают писать программу на алгоритмическом языке ("Хакер", N 9 ,2002, статья "Мечта идиота" (это не про меня))?
Romtek
Для того, чтобы набраться опыта... А так нет особой необходимости.
Я никогда не пишу программы, если есть уже готовое ПО, особенно встроенное в ОС.
Касатка
:D А как же тогда "вытащить" нужную подстроку из строки следующего файла- msdos.sys, в нужной позиции, да еще и на другом компьютере (имя директории Windows), а затем "слепить" из нее полный путь на удаленном компьютере и создать новую ком. строку?!
Нет ребята, раз уж вы профи, то подтвердите это: скажите как это сделать (создать файл messfile) внутри *.pas-проги, да и дело с концом.
Romtek
Цитата
как же тогда "вытащить" нужную подстроку из строки следующего файла- msdos.sys
Readln (F, str);

Цитата
в нужной позиции
copy(), pos()

Цитата
еще и на другом компьютере (имя директории Windows)
на компьютере в локальной сети - не имею понятия. sad.gif Здесь самая проблема.

Цитата
и создать новую ком. строку
Это самое сложное! :D
CmdStr := s1 + s2 + s3;

Цитата
скажите как это сделать (создать файл messfile) внутри *.pas-проги, да и дело с концом.
нифига не понял...
в смысле... реализовать программу на Паскале? См. выше.
Касатка
:o Ладно проехали. Romtek, раз уж ты сейчас на форуме, скажи пожалуйста, хоть это и не относится к теме-где мне взять кряк для утилиты CD-Rx data retriever (для восст. инфы с болванок). А то у меня сейчас что-то случилось с болванкой, на к-ой лежит очень ценный архив. Ни чем другим мне считать не удалось. Утилиту я взял с диска "Хакер", но эти придурки выложили там лицензионный (прикинь, получается надо платить 2 раза: за этот диск и еще раз покупать утилиту в магазине). В поисковиках смотрел, но там в ответ на мой запрос, предложили не кряки, а снять б..дей за $, а я "конечно только об этом и думаю". Срочно надо!
Atos
Можно попробовать считать инфу на другом компе... Может быть, и получится. Как-то мой сидюк тоже не определял файлы на болванке. Ещё у двух человек - аналогично. У третьего - часть файлов удалось скопировать. А у четвёртого вообще скачалось без проблем.
Касатка
huh.gif Давно хотел спросить: как с помощью стандартных программных средств (из той же ОС, например), можно определить диапазоны IP-адресов прова?
SKVOZNJAK
Насчёт кряков - осёл тебе поможет lol.gif fgngffcyggsfd
volvo
Что-то вы, ребята, от темы отклонились... По-видимому, тема себя исчерпала.

Закрыто
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.