Решено: Не могу понять логику работы Process

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Решено: Не могу понять логику работы Process

Сообщение azsx »

Не могу понять логику работы Process в windows, он кое что запускает, а кое что нифига.
Например, хочу создать ярлык на рабочем столе.

программа в лазарус

Код: Выделить всё

uses Process;
***
var
  AProcess: TProcess;
begin
      AProcess := TProcess.Create(nil);
      AProcess.CommandLine := 'b.vbs';
      AProcess.Options := AProcess.Options + [poWaitOnExit];
      AProcess.Execute;
      AProcess.Free;
end;


сам скрипт (надо сменить USER_VASH если вы ничего не меняли по стандарту, в оригинальной проге я считываю данные заранее).
b.vbs

Код: Выделить всё

Set WshShell = WScript.CreateObject("WScript.Shell")
Set oShellLink = WshShell.CreateShortcut("C:\users\USER_VASH\desktop\нотепад.lnk")
oShellLink.TargetPath = "C:\windows\system32\notepad.exe"
oShellLink.WorkingDirectory = "C:\windows\system32\"
oShellLink.Save


Программа на лазарус вылетает по 193 ошибке. При этом если запустить сам скрипт из проводника - он работает.
Как выполнить скрипт vbs в лазарус? Также надо будет удалить ярлык с рабочего стола - тоже не работает, уже просто команда del /Q (без внешних файлов скриптов).
Последний раз редактировалось azsx 07.12.2015 10:45:58, всего редактировалось 1 раз.
Аватара пользователя
minoshi
постоялец
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Сообщение minoshi »

Запустить интерпретатор

Код: Выделить всё

AProcess.CommandLine := "start /w wscript.exe b.vbs" 

или

Код: Выделить всё

AProcess.CommandLine := "wscript.exe b.vbs" 
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

azsx
А если попробовать так:

Код: Выделить всё

uses Process;

var
  AProcess: TProcess;
begin
      AProcess := TProcess.Create(nil);
      AProcess.Executable := 'cscript.exe';
      AProcess.Parameters.Add('b.vbs');
//      AProcess.Options := AProcess.Options + [poWaitOnExit];
      AProcess.Execute;
      AProcess.Free;
end.

?
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

сработал вариант

Код: Выделить всё

AProcess.CommandLine := 'wscript.exe b.vbs';

остальные не сработали.
Большое спасибо.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

azsx писал(а):остальные не сработали.

Я свой вариант проверил. Значит у Вас ещё какие-то проблемы...
Напоминаю, что "CommandLine" - кандидат на удаление и его применять не советуют.
Аватара пользователя
Tango
постоялец
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Сообщение Tango »

Нужно понимать, что есть запускаемое непосредственно приложение, а что документ, который открывается каким либо приложением.
Для второго случая нужно использовать ShellExecute.
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

Напоминаю, что "CommandLine" - кандидат на удаление и его применять не советуют.

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

к сожалению я прочитал документацию и умею запускать только одним способом
http://wiki.freepascal.org/Executing_Ex ... rograms/ru
Я свой вариант проверил. Значит у Вас ещё какие-то проблемы...

скорее всего
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Ответить