PDA

View Full Version : سوال: خطا در اجرای فایل EXE



Hsimple11
سه شنبه 13 خرداد 1393, 18:33 عصر
با سلام و خسته نباشید خدمت همه عزیزان برنامه نویس؛

من یک برنامه خیلی خیلی ساده تبلیغاتی دارم که روی سی دی به صدها کاربر داده شده. این برنامه با دلفی 7 و تحت ویندوز 7 نوشته شده است و یک فایل EXE است که بصورت اتوران از درون CD مستقیما اجرا میشود.

جدیدا تعدادی از کاربران ذکر کرده اند که موقع اجرای برنامه خطای


The application failed to initialize properly (0xc0000000). Click OK to terminate the application

دیده میشه و برنامه اجرا نمیشه.

از اونجایی که نسبتا تعداد این شکایات زیاد شده بعیده که مربوط به بد رایت شدن سی دی ها یا مشکل CD-ROM یا کامپیوتر کاربران باشه و احتمالا ناسازگاری در سورس برنامه وجود داره.

اما اینقدر این برنامه ساده است که هیچ کد خاصی نداره و 4 تا عکس هست! برای همین تعجب میکنم که چطور میتونه خطا بده.

تنها چیزی که داره اینه که یک عکس روی یک Form هست که با کلیلک روی اون ShellExecute فراخوانی شده و یک فایل اجرا میشه

عکسهایی هم که توی این Image لود میشن در یک فایل RES هستند که بعد از Uses بصورت{$R PIX.RES} قرار میگیره و فراخوانی میشه.

توی Uses برنامم هم یونیتهایی که دارم ShellApi و GraphicEX هست. دیگه هیچ کد دیگه ای نداره. حدس میزنم از همین ShellApi باشه. آیا میتونه در ویندوزهای خاصی یا مثلا سیستمهای 64بیتی ناسازگار باشه؟

بخدا موندم آخه 2 خط دستور چطور روی سیستم بعضی ها کار نمیکنه!

ممنون میشم راهنمایی بفرمایید... برای اینکه نقطه ابهامی نمونه سورس رو میگذارم ملاحظه بفرمایید:



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, GraphicEx,ShellApi, JPEG,ExtCtrls, Buttons,ImageEXMouseLeave;

type
TMain = class(TForm)
Image1: TImage;
ImageEx1: TImageEx;
ImageEx2: TImageEx;
ImageEx3: TImageEx;
ImageEx4: TImageEx;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure ImageEx1MouseEnter(Sender: TObject);
procedure ImageEx1MouseLeave(Sender: TObject);
procedure ImageEx2MouseLeave(Sender: TObject);
procedure ImageEx2MouseEnter(Sender: TObject);
procedure ImageEx3MouseEnter(Sender: TObject);
procedure ImageEx3MouseLeave(Sender: TObject);
procedure ImageEx4MouseEnter(Sender: TObject);
procedure ImageEx4MouseLeave(Sender: TObject);
procedure ImageEx4Click(Sender: TObject);
procedure ImageEx2Click(Sender: TObject);
procedure ImageEx3Click(Sender: TObject);
procedure ImageEx1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
Procedure LOADPIC (PIC : PAnsiChar);
{ Public declarations }
end;

var
Main: TMain;

implementation

uses Unit2, Unit3, Unit4;

{$R *.dfm}
{$R PIX.RES}


Procedure TMain.LOADPIC (PIC : PAnsiChar);
var
PNG_IMAGE : TPNGGraphic;
RES_IMAGE : TResourceStream;
begin
RES_IMAGE := TResourceStream.Create(HInstance , 'IMAGE', PIC);
PNG_IMAGE := TPNGGraphic.Create;

Try
PNG_IMAGE.LoadFromStream(RES_IMAGE);
Image1.Picture.Bitmap.Assign(PNG_IMAGE);
Finally
RES_IMAGE.Free;
PNG_IMAGE.Free;
End;

end;

//---------------------------------------------------------------------
procedure TMain.FormCreate(Sender: TObject);
Begin
Main.Brush.Style := bsClear;
Main.BorderStyle := bsNone;

end;

procedure TMain.SpeedButton4Click(Sender: TObject);
begin
Application.Terminate;
end;


procedure TMain.ImageEx1MouseEnter(Sender: TObject);
begin
LOADPIC('Enterrollover')
end;

procedure TMain.ImageEx1MouseLeave(Sender: TObject);
begin
LOADPIC('rollout');
end;

procedure TMain.ImageEx2MouseLeave(Sender: TObject);
begin
LOADPIC('rollout');
end;

procedure TMain.ImageEx2MouseEnter(Sender: TObject);
begin
LOADPIC('Aboutrollover');
end;

procedure TMain.ImageEx3MouseEnter(Sender: TObject);
begin
LOADPIC('Aboutusrollover');
end;

procedure TMain.ImageEx3MouseLeave(Sender: TObject);
begin
LOADPIC('rollout');
end;

procedure TMain.ImageEx4MouseEnter(Sender: TObject);
begin
LOADPIC('Exitrollover');
end;

procedure TMain.ImageEx4MouseLeave(Sender: TObject);
begin
LOADPIC('rollout');
end;

procedure TMain.ImageEx4Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TMain.ImageEx2Click(Sender: TObject);
begin
AboutUs.Hide;
About.Show;

end;

procedure TMain.ImageEx3Click(Sender: TObject);
begin
About.Hide;
aboutus.Show;
end;

procedure TMain.ImageEx1Click(Sender: TObject);
begin
Try
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + '\_RES\Movie.Exe') , '', '', SW_SHOWNORMAL);
Except
ShowMessage('Corrupted File');
End;

AboutUs.Hide;
About.Hide;
Timer1.Enabled := True;
Waitform.ShowModal;

end;

procedure TMain.Timer1Timer(Sender: TObject);
begin
Application.Terminate;
end;

end.

Mask
سه شنبه 13 خرداد 1393, 19:18 عصر
این پیغام دقیقا در ابتدای استارت برنامه میاد ، یا زمانی که روی عکس یا دکمه ای میرید یا کلیک میکنید؟

Hsimple11
سه شنبه 13 خرداد 1393, 21:16 عصر
این پیغام دقیقا در ابتدای استارت برنامه میاد ، یا زمانی که روی عکس یا دکمه ای میرید یا کلیک میکنید؟

گویا اصلا برنامه باز نمیشه و وقتی روی فایل EXE کلیک میکنند این ارور رو میده

Hsimple11
سه شنبه 13 خرداد 1393, 21:19 عصر
چند نمونه از این سی دی ها رو بطور تصادفی امتحان کردم و همگی درست بودند روی سیستم من. نمیدونم ناسازگاری با کامپیوتر بعضی کاربران به چه دلیلی میتونه باشه.

SayeyeZohor
سه شنبه 13 خرداد 1393, 22:34 عصر
چند نمونه از این سی دی ها رو بطور تصادفی امتحان کردم و همگی درست بودند روی سیستم من. نمیدونم ناسازگاری با کامپیوتر بعضی کاربران به چه دلیلی میتونه باشه.

خب سمپل کدت رو آپلود کن تا چک کنیم