PDA

View Full Version : چک کردن یک برنامه نصب شده در ویندوز



zahra_no
پنج شنبه 15 تیر 1391, 13:56 عصر
سلام، عیدتون مبارک
دوستان همون طور که از عنوان تاپیک مشخصه میخواستم چک کنم که برنامه مثلا Flash player تو سیستم نصب شده یا نه، اگر نه شورع به نصب کنه
گشتم ولی چیزی تو سایت پیدا نکردم کدی که نصب برنامه ها تو سیستم رو چک کنه.

SayeyeZohor
پنج شنبه 15 تیر 1391, 14:19 عصر
با استفاده از رجيستري ويندوز مي توني چك كني

SayeyeZohor
پنج شنبه 15 تیر 1391, 14:27 عصر
هلو بپر تو گلو


uses
Registry;

FUNCTION IsWOW64: Boolean;
TYPE // Type of IsWow64Process API fn
TIsWow64Process = function(Handle: THandle; var Res: BOOL): BOOL; stdcall;
VAR
IsWow64Result: BOOL; // result from IsWow64Process
IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
BEGIN
// Try to load required function from kernel32
IsWow64Process := GetProcAddress(GetModuleHandle('kernel32'), 'IsWow64Process');
IF Assigned(IsWow64Process) THEN
BEGIN
// Function is implemented: call it
if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
raise Exception.Create('Bad process handle');
// Return result of function
Result := IsWow64Result;
END
ELSE
// Function not implemented: can't be running on Wow64
Result := False;
END;

FUNCTION ProgramInstall(NameProgram: string): Boolean;
var
Reg: TRegistry;
RegKey: String;
Key: String;
BEGIN
Reg := TRegistry.Create;
TRY
Reg.RootKey := HKEY_LOCAL_MACHINE;
Key := 'SOFTWARE\';
IF IsWOW64 THEN Key := Key + 'Wow6432Node\';
Key := Key + 'Microsoft\Windows\CurrentVersion\Uninstall\' + NameProgram;

IF (Reg.OpenKeyReadOnly(Key)) AND (Reg.ValueExists('DisplayName')) THEN
BEGIN
RegKey := Reg.ReadString('DisplayName');
Reg.CloseKey;
Result := True;
END
ELSE
BEGIN
Reg.CloseKey;
Result := False;
END;
FINALLY
Reg.Free
END;
END;

zahra_no
پنج شنبه 15 تیر 1391, 15:15 عصر
ببخشید من حالا چطوری بفهمم که flash player نصب شده یا نه :خجالت:

SayeyeZohor
پنج شنبه 15 تیر 1391, 15:36 عصر
كليد مربوط بهش رو بايد بدونين
مثلاً
Adobe Flash Player 10 ActiveX :

IF ProgramInstall('Adobe Flash Player ActiveX') THEN


Adobe Flash Player 10 Plugin

IF ProgramInstall('Adobe Flash Player Plugin') THEN


Adobe Shockwave Player 11.5

IF ProgramInstall('Adobe Shockwave Player') THEN

zahra_no
چهارشنبه 21 تیر 1391, 12:53 عصر
ببخشید این کد روی سیستم های 64 بیت جواب نمیده،
یعنی وقتی که flash player 11 64 bit رو سیستم نصب هست با پیغام IF ProgramInstall('Adobe Flash Player ActiveX میگه که نصب نشده. من این رو چطوری باید چک کنم که تو هر سیستمی جواب بده؟

zahra_no
چهارشنبه 21 تیر 1391, 14:28 عصر
من از این تکه کد هم برای نمایش برنامه های نصب شده در سیستم استفاده کردم تا از طریق این بتونم بفهمم که آیا فلش نصب شده یا نه، ولی این تکه کد در 32 بیت جواب میده ولی تو 64 بیت جواب نمیده؟ چرا؟؟؟؟؟؟

procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str: string;
begin
MyRegistry:=TRegistry.Create;
MyList:=TStringList.Create;
with MyRegistry do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\Microsoft\Windows\CurrentVersion \Uninstall', False)=True then
GetKeyNames(MyList);
CloseKey;

for i:=0 to MyList.Count-1 do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion \Uninstall\'+MyList[i], False);
Str:=ReadString('DisplayName');
if Str<>'' then
Memo1.Lines.Add(ReadString('DisplayName'));
CloseKey;
end;
end;

end;

SayeyeZohor
چهارشنبه 21 تیر 1391, 18:01 عصر
flash player 11 64 bit رو برام اپلود كنين تا بگم بهتون

SayeyeZohor
چهارشنبه 21 تیر 1391, 19:18 عصر
اگه بعد از نصب اين ShellExecute(Handle, nil,PChar(ExtractFilePath(Application.ExeName)+'da ta\FlashPlayer.exe'), nil, nil, SW_SHOWNORMAL); مشكلتون حل ميشه FlashPlayer.exe رو آپلود كنين تا بگم چيكار كنين

SayeyeZohor
چهارشنبه 21 تیر 1391, 19:32 عصر
IF ProgramInstall('{98492E94-F0DA-4227-B21B-1F3EEB8D5B13}') THEN

SayeyeZohor
چهارشنبه 21 تیر 1391, 20:00 عصر
FUNCTION IsWOW64: Boolean;
TYPE // Type of IsWow64Process API fn
TIsWow64Process = function(Handle: THandle; var Res: BOOL): BOOL; stdcall;
VAR
IsWow64Result: BOOL; // result from IsWow64Process
IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
BEGIN
// Try to load required function from kernel32
IsWow64Process := GetProcAddress(GetModuleHandle('kernel32'), 'IsWow64Process');
IF Assigned(IsWow64Process) THEN
BEGIN
// Function is implemented: call it
if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
raise Exception.Create('Bad process handle');
// Return result of function
Result := IsWow64Result;
END
ELSE
// Function not implemented: can't be running on Wow64
Result := False;
END;

procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str, Key: string;
begin
MyRegistry:=TRegistry.Create;
MyList:=TStringList.Create;
WITH MyRegistry DO
BEGIN
RootKey:=HKEY_LOCAL_MACHINE;

Key := 'SOFTWARE\';
IF IsWOW64 THEN Key := Key + 'Wow6432Node\';
Key := Key + 'Microsoft\Windows\CurrentVersion\Uninstall\';
IF OpenKey(Key, False) = True THEN GetKeyNames(MyList);
CloseKey;

FOR i := 0 to MyList.Count-1 DO
BEGIN
RootKey := HKEY_LOCAL_MACHINE;
OpenKey(Key + MyList[i], False);
Str := ReadString('DisplayName');
IF Str <> '' THEN Memo1.Lines.Add(ReadString('DisplayName'));
CloseKey;
END;
END;

MyRegistry.Free;
MyList.Free;
end;

SayeyeZohor
چهارشنبه 21 تیر 1391, 20:17 عصر
اين رو دانلـــــــــــــــــــود (http://s3.picofile.com/file/7434023224/%D9%84%DB%8C%D8%B3%D8%AA_%D8%A8%D8%B1%D9%86%D8%A7% D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D9%86%D8%B5%D8%A8_ %D8%B4%D8%AF%D9%87_%D8%AF%D8%B1_%D9%88%DB%8C%D9%86 %D8%AF%D9%88%D8%B2_%D9%88_%D8%AC%D8%B3%D8%AA%D8%AC %D9%88_%D8%AF%D8%B1_%D8%A2%D9%86.rar.html) كنين
نسخه 32 و 64 بيتي با امكان جستجو

SayeyeZohor
پنج شنبه 22 تیر 1391, 18:40 عصر
اين رو دانلود (http://s3.picofile.com/file/7434829565/FlashIsNotInstall.rar.html)كنين
تست شده در ويندوز 7 64 بيتي

zahra_no
پنج شنبه 22 تیر 1391, 19:45 عصر
کــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــاش میشد چندبار تشکر کرد. واقعا ممنونم آقای نیکوئی
این آخری معرکه است.