PChar ist ein Zeiger auf einen String. Dem String hast du aber keinen Speicher zugewiesen. Wenn deine Variable Batch_Befehl als String deklariert ist, geschieht dies automatisch. Arbeite primär mit Variablen vom Typ String, die du dann mit einer Typumwandlung in PChar umwandeln kannst, wenn's benötigt wird. So funktioniert dein Code:
Code: Alles auswählen
var
Batch_Befehl: String;
const
Batch_Befehl_Name = '/c "C:\Program Files (x86)\Windows Resource Kits\Tools\srvcheck.exe" \\%computername% >';
Freigaben_TXT_Name = 'permissions.txt';
begin
Batch_Befehl := Batch_Befehl_Name + ExtractFilePath(ParamStr(0)) + Freigaben_TXT_Name;
ShellExecute (0,'open','cmd.exe', PChar(Batch_Befehl), nil, SW_SHOW);
end.
Zusätzlich möchte ich noch darauf hinweisen, dass ShellExecute dein Programm nur unter Windows laufen lässt. Falls du irgendwann einmal daran denken solltest, auf Linux zu wechseln, wäre es gut, wenn du schon beizeiten anfängst, nicht mehr in der Windows-Welt zu denken. Das kann nicht schaden. Für deine Fragestellung lautet ein plattformunabhängiger Befehl "RunCommand" (in der Unit Process):
Code: Alles auswählen
var
Batch_Befehl: String;
outStr: String;
const
Batch_Befehl_Name = '/c "C:\Program Files (x86)\Windows Resource Kits\Tools\srvcheck.exe" \\%computername% >';
Freigaben_TXT_Name = 'permissions.txt';
begin
Batch_Befehl := Batch_Befehl_Name + ExtractFilePath(ParamStr(0)) + Freigaben_TXT_Name;
RunCommand('cmd.exe /c dir *.* > ' + ExtractFilePath(ParamStr(0)) + Freigaben_TXT_Name, outStr);
// In outstr landet die Ausgabe deines Programms, die aber hier wegen der Ausgabeumleitung leer ist.
end.
Mehr über das Ausführen externer Prozesse findest du im Wiki unter
http://wiki.freepascal.org/Executing_Ex ... rograms/de