Saeed_m_Farid
پنج شنبه 28 مرداد 1389, 11:09 صبح
سلام
من برنامه ای دارم که مجبورم در مواقعی درایور یک کارت PCI رو حذف و نصب مجدد کنم؛ بعلت بعد مسافت نمیخوام کاربر درگیر این کار بشه و یا پشتیبان بفرستم و ...
راه هایی که امتحان کردم، یکی استفاده از توابع difxapi.dll (یک سری API مایکروسافت برای اینکار : Driver Install Frameworks for API library module) بود که متاسفانه جواب نمیده، من API تبدیل شده پاسکال و فایل Dll رو ضمیمه کردم برای دوستانی که فکر میکنن بدردشون میخوره؛ کدی که مینویسم واسه اینکار :
Function InstallMyDriver: DWORD;
const
elkaInfFile = '\WINDOWS\inf\elkaE1.inf';
var
NR: Boolean;
Info: PCINSTALLERINFO_A;
begin
GetMem (Info, 128);
Info.pApplicationId := 'tw';
Info.pDisplayName := 'My PCI Driver';
Info.pProductName := 'Installation Disk #1 (Multifunction)';
Info.pMfgName := 'Elka';
DriverPackageUninstall (PChar (elkaInfFile), DRIVER_PACKAGE_FORCE or DRIVER_PACKAGE_DELETE_FILES, Info, NR);
FreeMem (Info);
end;
function RemoveMyDriver: DWORD;
const
elkaInfFile = '\WINDOWS\inf\elkaE1.inf';
var
NR: Boolean;
Info: PCINSTALLERINFO_A;
begin
GetMem (Info, 128);
Info.pApplicationId := 'tw';
Info.pDisplayName := 'My PCI Driver';
Info.pProductName := 'Installation Disk #1 (Multifunction)';
Info.pMfgName := 'Elka';
DriverPackageInstall (PChar (elkaInfFile), DRIVER_PACKAGE_FORCE or DRIVER_PACKAGE_LEGACY_MODE, Info, NR);
FreeMem (Info);
end;
ولی متاسفانه وای میسه منو نگاه میکنه، نه Error ای، نه Exception ای و ...
**********************
یک راه دیگه هم کد زیر هست که اونم Remove اش رو نمیدونم، البته همین هم کار نمیکنه!
function InstallINF(const PathName: string; hParent: HWND): Boolean;
var
instance: HINST;
begin
instance := ShellExecute(hParent,
PChar('open'),
PChar('rundll32.exe'),
PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName),
nil,
SW_HIDE) ;
Result := instance > 32;
end;
اینم درسته ShellExecute بزرگتر از 32 برمیگردونه ولی خطا میده که نصب درایور ناموفق بوده و ...
تو جستجوهام دیدم که به JEDI VCL اشاره کردن ولی نمیتونم 600 تا کامپوننت نصب کنم ببینم کدومشون به Driver مربوط میشه، ضمن اینکه از readme.htm درون پوشه jvcl چیزی در اینباره دستگیرم نشد، دوستان تجربه ای در این زمینه دارند؟
Thanks in advance
من برنامه ای دارم که مجبورم در مواقعی درایور یک کارت PCI رو حذف و نصب مجدد کنم؛ بعلت بعد مسافت نمیخوام کاربر درگیر این کار بشه و یا پشتیبان بفرستم و ...
راه هایی که امتحان کردم، یکی استفاده از توابع difxapi.dll (یک سری API مایکروسافت برای اینکار : Driver Install Frameworks for API library module) بود که متاسفانه جواب نمیده، من API تبدیل شده پاسکال و فایل Dll رو ضمیمه کردم برای دوستانی که فکر میکنن بدردشون میخوره؛ کدی که مینویسم واسه اینکار :
Function InstallMyDriver: DWORD;
const
elkaInfFile = '\WINDOWS\inf\elkaE1.inf';
var
NR: Boolean;
Info: PCINSTALLERINFO_A;
begin
GetMem (Info, 128);
Info.pApplicationId := 'tw';
Info.pDisplayName := 'My PCI Driver';
Info.pProductName := 'Installation Disk #1 (Multifunction)';
Info.pMfgName := 'Elka';
DriverPackageUninstall (PChar (elkaInfFile), DRIVER_PACKAGE_FORCE or DRIVER_PACKAGE_DELETE_FILES, Info, NR);
FreeMem (Info);
end;
function RemoveMyDriver: DWORD;
const
elkaInfFile = '\WINDOWS\inf\elkaE1.inf';
var
NR: Boolean;
Info: PCINSTALLERINFO_A;
begin
GetMem (Info, 128);
Info.pApplicationId := 'tw';
Info.pDisplayName := 'My PCI Driver';
Info.pProductName := 'Installation Disk #1 (Multifunction)';
Info.pMfgName := 'Elka';
DriverPackageInstall (PChar (elkaInfFile), DRIVER_PACKAGE_FORCE or DRIVER_PACKAGE_LEGACY_MODE, Info, NR);
FreeMem (Info);
end;
ولی متاسفانه وای میسه منو نگاه میکنه، نه Error ای، نه Exception ای و ...
**********************
یک راه دیگه هم کد زیر هست که اونم Remove اش رو نمیدونم، البته همین هم کار نمیکنه!
function InstallINF(const PathName: string; hParent: HWND): Boolean;
var
instance: HINST;
begin
instance := ShellExecute(hParent,
PChar('open'),
PChar('rundll32.exe'),
PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName),
nil,
SW_HIDE) ;
Result := instance > 32;
end;
اینم درسته ShellExecute بزرگتر از 32 برمیگردونه ولی خطا میده که نصب درایور ناموفق بوده و ...
تو جستجوهام دیدم که به JEDI VCL اشاره کردن ولی نمیتونم 600 تا کامپوننت نصب کنم ببینم کدومشون به Driver مربوط میشه، ضمن اینکه از readme.htm درون پوشه jvcl چیزی در اینباره دستگیرم نشد، دوستان تجربه ای در این زمینه دارند؟
Thanks in advance