Переменный путь к файлу в командной строке Lazarus/Free Pascal

Я хочу запустить внешнюю программу под названием «copy.bat», расположенную на моем рабочем столе «C:\Users\Jack\Desktop\RunProgram\lib\x86_64-win64». Если я хочу запустить Программу на чужом компьютере/учетной записи, где «copy.bat» находится в той же папке, это не сработает, потому что имя пользователя изменится. Мой вопрос: есть ли способ использовать переменное имя пользователя?

Это то, что я придумал, но это не работает...

  var
  Form1: TForm1;
  Runprogram:TProcess;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  RunProgram := TProcess.Create(nil);
  RunProgram.CommandLine := '%USERPROFILE%\Desktop\RunProgram\lib\x86_64-win64\Copy.bat';
  RunProgram.Execute;
  RunProgram.Free;


end; 

P.S. Если я ввожу этот путь «C:\Users\Jack\Desktop\RunProgram\lib\x86_64-win64\Copy.bat», он работает.


person Jack    schedule 07.08.2017    source источник
comment
SHGetKnownFolderPath   -  person David Heffernan    schedule 07.08.2017
comment
@ Дэвид Хеффернан, я до сих пор не знаю, как это реализовать. Может быть, вы можете помочь мне немного дальше.   -  person Jack    schedule 07.08.2017
comment
Некоторый веб-поиск даст много примеров.   -  person David Heffernan    schedule 07.08.2017
comment
Мне очень жаль, но я новичок в Lazarus и Delphi (знал только самые основы), и просто просмотр команды не сказал мне ничего, с чем я мог бы работать. Может быть, вы могли бы потратить некоторое время и дать мне ссылку на сайт, где использование команды хорошо и легко объясняется:   -  person Jack    schedule 07.08.2017
comment
Я связался с документацией. Разве ты не понял?   -  person David Heffernan    schedule 07.08.2017
comment
Нет, не совсем или лучше, я не знаю, как мне его использовать.   -  person Jack    schedule 07.08.2017
comment
Что ж, вам, вероятно, нужно сделать более базовое обучение. Эта задача сейчас вне вашей досягаемости.   -  person David Heffernan    schedule 07.08.2017
comment
Была только функция C++, учитывая, как я должен использовать ее для Lazarus   -  person Jack    schedule 07.08.2017


Ответы (1)


Вы можете использовать функцию "GetEnvironmentVariable"

userP := GetEnvironmentVariable(String('USERPROFILE'));
RunProgram.CommandLine := userP + '\Desktop\RunProgram\lib\x86_64-win64\Copy.bat';
person martin.res    schedule 17.08.2017