Я программирую с помощью Delphi 2010 на 32-разрядном ПК с Windows 7.Delphi. Команда ShellExecute выполняется правильно на Win 7, но не Win 8
Следующий код работает при запуске на моем ПК в качестве администратора.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ShellExecute(0,'open','command','/c ipconfig /all > testipco.txt','',0);
showmessage('Test IP Config file should be written');
end;
end.
Файл TESTIPCO.TXT выводится и содержит те же результаты, набрав IPCONFIG/все в окне командной строки.
Когда я скомпилировал файл и запустил его на 64-разрядном компьютере под управлением Windows 8.1 в качестве администратора, программа, похоже, работает нормально, отображая сообщение (без ошибок), но файл TESTIPCO.TXT не создается.
Даже запуск exe на машине под управлением Windows 8 с совместимостью, установленным для запуска, поскольку Windows 7 не работает.
Я просто не могу понять, почему это так. Я надеюсь, что один из вас, яркие люди, сможет направить меня в правильном направлении.
Извинения. В целях разъяснения. Он должен сказать: «Когда я компилирую программу и запускаю ее на 64-разрядном компьютере под управлением Windows 8.1 как администратор», а не «Когда я компилирую файл и запускаю его на 64-разрядном компьютере под управлением Windows 8.1 в качестве администратора». – Paul
См. [Delphi ShellExecute не работает в Windows 7] (http://stackoverflow.com/q/14170998/576719). –
Командный интерпретатор - 'cmd.exe'. 'command' - от DOS и Win 9x. Лучше использовать CreateProcess для запуска процесса. Но в любом случае ShellExecute не сообщает об ошибках должным образом. Не то, чтобы вы, кажется, проверяли наличие ошибок. Вы заявляете, что программа не показывает никаких ошибок, но, конечно, нет - вы не проверяли наличие ошибок. В любом случае, когда вы решите добавить проверку ошибок, вы захотите использовать ShellExecuteEx для лучшей отчетности об ошибках. Тем не менее, CreateProcess - это правильная функция здесь. –