2015-06-29 3 views
1

Я программирую с помощью 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 не работает.

Я просто не могу понять, почему это так. Я надеюсь, что один из вас, яркие люди, сможет направить меня в правильном направлении.

+0

Извинения. В целях разъяснения. Он должен сказать: «Когда я компилирую программу и запускаю ее на 64-разрядном компьютере под управлением Windows 8.1 как администратор», а не «Когда я компилирую файл и запускаю его на 64-разрядном компьютере под управлением Windows 8.1 в качестве администратора». – Paul

+0

См. [Delphi ShellExecute не работает в Windows 7] (http://stackoverflow.com/q/14170998/576719). –

+0

Командный интерпретатор - 'cmd.exe'. 'command' - от DOS и Win 9x. Лучше использовать CreateProcess для запуска процесса. Но в любом случае ShellExecute не сообщает об ошибках должным образом. Не то, чтобы вы, кажется, проверяли наличие ошибок. Вы заявляете, что программа не показывает никаких ошибок, но, конечно, нет - вы не проверяли наличие ошибок. В любом случае, когда вы решите добавить проверку ошибок, вы захотите использовать ShellExecuteEx для лучшей отчетности об ошибках. Тем не менее, CreateProcess - это правильная функция здесь. –

ответ

1

Вы попробовали cmd.exe? Command - несколько архаичная ссылка.

+0

Спасибо. Это исправило это. Я идиот. – Paul