PDA

View Full Version : ریجستر کردن در موقع نصب برنامه



khoshblagh
پنج شنبه 24 اردیبهشت 1388, 08:13 صبح
با سلام خدمت دوستان
کسی میدونه چطور میشه از طریق خط برنامه اکتیو ایکس خاصی را ریجستر کرد. توضیح اینکه یک برنامه را میخواهم از داخل برنامه خود استفاده کنم. منتها باید قبل از اون اکتیو ایکس خاصی را بروی کامپیوتر مورد نظر ریجستر کنم. هدف من اینه وقتی برنامه خودم را بروی یک کامپیوتر جدید نصب کردم از طریق برنامه نسبت به ریجستر کردن اکتیو ایکس مورد نظر اقدام نمایم. متشکرم

Saeed_m_Farid
پنج شنبه 24 اردیبهشت 1388, 10:53 صبح
با سلام خدمت دوستان
کسی میدونه چطور میشه از طریق خط برنامه اکتیو ایکس خاصی را ریجستر کرد. توضیح اینکه یک برنامه را میخواهم از داخل برنامه خود استفاده کنم. منتها باید قبل از اون اکتیو ایکس خاصی را بروی کامپیوتر مورد نظر ریجستر کنم. هدف من اینه وقتی برنامه خودم را بروی یک کامپیوتر جدید نصب کردم از طریق برنامه نسبت به ریجستر کردن اکتیو ایکس مورد نظر اقدام نمایم. متشکرم
سلام
با regsvr32 و دادن مسیر ocx به عنوان پارامتر میشه ActiveX موردنظر رو رجیستر کرد
اگه برنامه نهایی شما آماده است و فایل نصبی واسش درست می کنید : خیلی از installer ها اینکار رو واستون انجام میدن مثل Advanced Installer یا Wise
اگه اصرار دارین اینکار رو از سورس خودتون انجام بدین بگید تا تو پست بعدی بیشتر راهنمایی کنم، ولی به هر صورت شما باید مسیر ActiveX رو بدونین.

hojjatcroos
پنج شنبه 24 اردیبهشت 1388, 11:10 صبح
دوستمون درست می گن می تونید regsvr32 رو در Run وارد کنید و جوابتون رو بگیرید

Saeed_m_Farid
پنج شنبه 24 اردیبهشت 1388, 11:18 صبح
امیدوارم نگید که یه مساله ساده رو لازم نبود اینقد بپیچونی، ولی خوب فعلا این راه به ذهنم رسید، امیدوارم به دردتون بخوره، کافیه تابع رو با مسیر Ocx فراخوانی کنید :


(************************************************* ***************)

function RegActiveXandWait(sOCXPath: String;
bSilentMode: Boolean = True): Boolean;
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
Result := False;
Ph := 0;
try
FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do begin
cbSize := SizeOf(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
ExInfo.lpVerb := 'open';
if bSilentMode then
ExInfo.lpParameters := PChar('/s "'+sOCXPath+'"')
else
ExInfo.lpParameters := PChar('"'+sOCXPath+'"');
lpFile := PChar('regsvr32');
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
Ph := exInfo.HProcess
else begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
end;
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
Result := True;
finally
CloseHandle(Ph);
end;
end;

(************************************************* ***************)



پ.ن. : اگه مشکل داشت، بگید ممنون میشم ...

khoshblagh
پنج شنبه 24 اردیبهشت 1388, 13:38 عصر
سلام
اگه اصرار دارین اینکار رو از سورس خودتون انجام بدین بگید تا تو پست بعدی بیشتر راهنمایی کنم، ولی به هر صورت شما باید مسیر ActiveX رو بدونین.

من اینکارو میخواهم از طریق سورس برنامه خودم انجام دهم . با تشکر

Saeed_m_Farid
پنج شنبه 24 اردیبهشت 1388, 14:06 عصر
من اینکارو میخواهم از طریق سورس برنامه خودم انجام دهم . با تشکر
تابع بالا رو اجرا کنید، این تابع تا زمانیکه عملیات رجیستر تموم نشده منتظر میشه (البته AntiFreez هست یعنی فرمتون قفل نمیکنه ...) بعد میره خط بعد کدتون رو اجرا میکنه.
اگه پارامتر دوم رو خالی بذارید : بصورت Silent کامپوننت شما رجیستر میشه، یعنی پیغامی مبنی بر اتمام عملیات یا اشکال در نحوه اجرا نمیده، در صورتیکه بخواین نتیجه نمایش داده بشه، باید پارامتر دوم رو False بدین.
در ضمن مشکلی که شما خواهید داشت : هر بار که برنامه اجرا میشه اینکار تکرار خواهد شد، مگر اینکه رجیستر شدن کامپوننت موردنظر رو چک کنید، یا مثلا تو رجیستری خودتون یه فلگ واسه عدم تکرار اینکار ثبت کنید.

new_sra
پنج شنبه 24 اردیبهشت 1388, 19:16 عصر
regsvr32
http://www.imageurlhost.com/images/qv81ynhttbzpns1dhbk.jpg