PDA

View Full Version : رجیستر کردن ocx از طریق کدنویسی در ویندوز 7



mahdiyara
پنج شنبه 16 تیر 1390, 12:45 عصر
سلام من یک برنامه با vb6 نوشتم که در اون از ابزارهای windows common control استفاده کردم . برای نصب فایل اکتیویکس comctl32.ocx از طریق کدنویسی با دستور
Shell "RegSvr32 /s " & App.Path & "comctl32.ocx", vbNormalFocus
اقدام کردم . نمیخوام برنامه نیاز به اجرای فایل setup داشته باشه . حالا توی ویندوز 7 با توجه به اینکه باید این دستور در حالت administrator اجرا بشه مشکل دارم . نمیدونم چطور باید به کاربرهای برنامه ام بگم برنامه را به صورت Run as Administrator کنن . چه راه دیگه ای هست . لطفا راهنماییم کنین . ممنونم

ali.rezaei7
پنج شنبه 16 تیر 1390, 19:11 عصر
سلام. دستور RegSvr32 برای اجرا در ویندوز 7 نیاز به توکن Administrator داره؛ پس در نتیجه زمانی که برنامه بصورت Standard access token اجرا میشه، مجوز لازم برای RegSvr32 فراهم نمیشه تا بتونه کامپوننت رو رجیستر کنه. اگه می خواهید که از این دستور برای ثبت کامپوننت استفاده کنید، تنها راهش Run as Administrator هستش.

بجای استفاده از regsvr32 از دستور پایین برای ثبت کامپوننت استفاده کنید:

Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Private Sub RegisterCom(ComFileName As String)

Dim lngLoadLB As Long
Dim lngGetAdd As Long
Dim lngSendMsg As Long

lngLoadLB = LoadLibrary(ComFileName)
lngGetAdd = GetProcAddress(lngLoadLB, "DllRegisterServer")
lngSendMsg = CallWindowProc(lngGetAdd, hWnd, (0), (0), (0))

FreeLibrary lngLoadLB

End Sub
به جای ComFileName مسیر فایل رو قرار بدید.

زمانی که از طرف ویندو با UAC Dialog مواجه شدید، روی دکمه Yes کلیک کنید تا برنامه شما دسترسی Administrator برای اجرای کد بالا رو داشته باشه.

موفق باشید...

zahedi121
جمعه 17 تیر 1390, 01:35 صبح
سلام
نمیشه کاری کرد که خود برنامه uac را هم تایید کند ؟
فکر کنم قبلا هم در این انجمن گفتم ، مشکل اصلی برنامه نویسها و کاربران با ثبت ocx ها و dll ها اینه که در بیشتر کامپیوتر های هدف کاربر به سطح admin دسترسی نداره ، در xp این موضوع مهم نیست چون تا محدود نشدن دسترسی کاربران عادی هم می توانند برنامه نصب کنند یا کامپونت ها را ریجیستر کنند ولی
در ویندوز سون به دلیل محدودیت ایجاد شده از ابتدا کاربر نمی تونه این عمل را انجام بدهد ، موارد مبتلا بهش هم زیاده : کاربران ادارات و شرکتها ، اگر کاربر خود ویندوز را نصب نکرده باشد و به رمز ادمین دسترسی نداشته باشه و... . خلاصه نکته مهم اینه که بشه از داخل برنامه این دسترسی و اجازه را ایجاد کرد.
حالا دیگه میشه یا نه را اساتید باید جواب بدهند.
متشکرم

ali.rezaei7
جمعه 17 تیر 1390, 16:51 عصر
سلام. امکان غیرفعال کردن UAC از داخل برنامه وجود نداره. سطح دسترسی توسط ویندوز تعیین میشه. برخلاف ویندوزهای قدیمی؛ زمانی که کاربر، با حساب مدیر(Administrator) به ویندوز 7 وارد بشه، دو سطح دسترسی Standard administrator access token و Full administrator access token برای Session جاری ایجاد میشه. در اینجا Standard access token حالت پیشفرض می باشد(برای جلوگیری از اجرای خودسرانه کدهای خطرناک). در نتیجه زمانی که شما یک اپلیکیشن ادمین رو اجرا میکنید، برای اجرای دستورالعمل ها، این نیاز بوجود میاد که سطح دسترسی به Full Access تغییر کنه. اینکار توسط سرویسی بنام User Account Control (UAC) انجام میشه. زمانی که کاربر پیغامی رو که از طرف UAC نمایش داده شده را تایید کنه، عملیات بدون هیچگونه مشکلی اجرا میشن. اصلا نیازی هم به پسورد دادنو اینجور چیزا هم نداره.

zahedi121
جمعه 17 تیر 1390, 19:31 عصر
سلام
اگر یک سرچ در گوگل بکنید می بینید حتی کدهای ریجستری که میشه UAC را غیر فعال کرد را قبلا دوستان زحمتش را کشیدند ، مشکل اصلی رسیدن به سطح ادمین است ، در مورد قسمت انتهایی صحبتتون UAC وقتی راحت اجرا و رد میشه که دسترسی شما محدود نشده باشه ، شما یک کاربر جدید برای ویندوزتان ایجاد کنید و دسترسی هاش را محدود کنید آنوقت ملاحظه می کنید که کارمندان محترم چه دردسری می کشند. تازه از UAC رد شدید اگر دسترسیتون محدود باشه چطوری میخواهید ocx , dll ها را نصب کنید . در سیستم یکی از دوستان اجازه کپی dll در system32 بسته شده ! و یک برنامه تقویم ساده که براش نوشتم که کارها را یاد آوری میکنه به همین خاطر اجرا نمیشه . البته شاید این بحث باید در یک انجمن هک مطرح بشه ولی آخه موضوع اصلی اینجاست که هکرهای محترم ! با VB6 خیلی کار ندارند :لبخندساده:

ali.rezaei7
جمعه 17 تیر 1390, 19:54 عصر
سلام. تا الان درمورد حساب های Adminstrator بحث کردم. و هیچ صحبتی درمورد حساب های محدود شده انجام ندادم.


اگر یک سرچ در گوگل بکنید می بینید حتی کدهای ریجستری که میشه UAC را غیر فعال کرد را قبلا دوستان زحمتش را کشیدنداینجا هیچ بحثی درمورد غیرفعال کردن سرویس UAC نشده، غیرفعال کردن UAC یک بحثیه و تایید کردن پیغام UAC هم یه بحث دیگه. شما فرمودید میشه از داخل برنامه UAC رو تایید کرد که من هم پاسخ مربوطه رو تو پست قبلیم نوشتم.

البته شما در صورتی می تونید UAC رو غیرفعال کنید که سطح دسترسی لازم برای تغییر در محل موردنظر رجیستری رو داشته باشید.

در مورد بقیه پست هاتون هم خوب کاملا صحیح می فرمایید. یوزر محدود، توانایی انجام تسک های ادمین رو نداره.