مشاهده نسخه کامل
: مشکل در ایجاد فایل در کاربرای غیر ادمین
shadmehrshadow1
24-01-2014, 11:57
سلام
من میخوام برای برنامه یک دوره 15 fبار برای اجرا بزارم ( برنامه پس از 15 بار اجرا از کار بیفته) که بعد از اون برنامه از کار بیفته برای همین یک فایل درست میکنم با پسوند dat که تعداد روز ها رو توی اون میریزم و بعد از هربار اجرا یکی بهش اضافه می کنم.
اما برای سیستم هایی که ادمین نیستند و یا full control نیستند پیغام خطا میده و میگه نمیتونه فایل رو ایجاد کنه و برنامه به خطا بر میخوره.
چاره چیست ؟ برای حل این مشکل چه باید کرد؟
راه های مختلفی وجود دارد:
1- در محلی که نیاز به دسترسی Admin ندارد ذخیره کنید. مثلا یکی از temp ها یا root درایو C .یا در Database !
2- در آغاز برنامه درخواست Administrator privilege بگذارید. همونی که تا برنامه باز می شود می گوید "مطمئنی؟" اینگونه در Mode مدیر برنامه باز می شود.
3- UAC را غیر فعال کنید که دیگر مشکل عدم دسترسی نداشته باشد.
اصلا این روش trial دهی را مطمئن هستید و می توانید به آن اطمینان کنید؟ چرا که:
1- ممکن است هر روز سیستم روشن نشود.
2- ممکن است ساعت و زمان سیستم تغییر کند.
موفق باشید.
shadmehrshadow1
24-01-2014, 15:08
1- در محلی که نیاز به دسترسی Admin ندارد ذخیره کنید. مثلا یکی از temp ها یا root درایو C .یا در Database !
در دیتابیس که زیاد جالب نیست چون میتونه برنامه رو دوباره نصب کنه و اون اطلاعات روز ها میپره و یا یه همچین مسائلی.
در مورد root فکر کنم یکم امنیت اون فایل از بین میره چون تعداد فایل های این مسیر کم هست و یه راحتی میشه فایل مورد نظر رو پیدا کرد. temp هم قابلیت پاک کردن و این مسائل رو داره.
2- در آغاز برنامه درخواست Administrator privilege بگذارید. همونی که تا برنامه باز می شود می گوید "مطمئنی؟" اینگونه در Mode مدیر برنامه باز می شود.
راستش با این روش آشنایی ندارم و نمیدونم چه طور میشه این کار رو کرد. توضیح میدید؟؟
3- UAC را غیر فعال کنید که دیگر مشکل عدم دسترسی نداشته باشد.
از طریق کد نویسی چه طور میشه این کار رو کرد؟!
اصلا این روش trial دهی را مطمئن هستید و می توانید به آن اطمینان کنید؟ چرا که:
1- ممکن است هر روز سیستم روشن نشود.
2- ممکن است ساعت و زمان سیستم تغییر کند.
ببخشید من اشتباه نوشتم بخش اول رو . منظورم پس از 15 بار اجرا بود. که دیگر اون 2 تا مشکل توش وجود ندارد.
در دیتابیس که زیاد جالب نیست چون میتونه برنامه رو دوباره نصب کنه و اون اطلاعات روز ها میپره
بسته به نوع دیتابیس و محل آن هم دارد اما در حالت عمومی حرف شما صحیح است.
در مورد root فکر کنم یکم امنیت اون فایل از بین میره چون تعداد فایل های این مسیر کم هست و یه راحتی میشه فایل مورد نظر رو
پیدا کرد.
کافی است تا نامی سیستمی انتخاب و وضعیت آن را نیز سیستمی کنید، آنگاه تشخیص آن کمی دشوار می شود و برای کاربران حرفه ای یافتن چنین چیزی کاری عادی بع حساب می آید.
. temp هم قابلیت پاک کردن و این مسائل رو داره.
حرف شما صحیح است. قصد من از بیان این مورد کلی تر کردن مطلب و بسط آن برای کاربران دیگر بود.
شاید ذکر این نکته نیز جالب باشد که در یک سیستم حداقل 2 نوع پوشه ی موقت وجود دارد: User Temp ، Default User Temp . که هر کدوم یک فایده ای دارند. که در نصاب ها خود را بیشتر نشان می دهد.
راستش با این روش آشنایی ندارم و نمیدونم چه طور میشه این کار رو کرد. توضیح میدید؟؟
روش بسیار ساده ای است:
ابتدا یک manifest به برنامه خود اضافه کنید. برای این کار Add New Item To Project رو بزنید و Application Manifest رو انتخاب کنید.
حال در اون شلوغی XML خودش یک جایی گفته که برنامه ی شما نیازمند چه سطح دسترسی است که پیش فرض یک مود ساده یعنی Invoker هست که میشه برنامه ی مهمان، نه برنامه ی مدیر. خوب باز هم خودش گفته که اگر Admin می خواهید باید چه کاری انجام دهید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که من در اینجا روی Admin تنظیم کرده ام. در ویندوز هایی هم که UAC فعال باشد عکس گارد کنار ICON برنامه مبنی بر درخواست Admin این برنامه وجود خواهد داشت.
از طریق کد نویسی چه طور میشه این کار رو کرد؟!
کار نشد ندارد. برای این کار باید یگ کلید رجیستری را از یک به صفر تغییر دهید. از این آدرس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سپس کلید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رو از صفر به یک برای غیر فعال کردن، از صفر به یک هم برای فعال کردن تغییر بدهید.
لازم به یادآوری است که برای همین کار هم نیازمند دسترسی Admin هستید.
موفق باشید.
shadmehrshadow1
26-01-2014, 11:40
خیلی ممنون بابت توضیحاتتون. :n16:
ببخشید من نتونستم manifest رو ایجاد کنم. شاید متوجه منظورتون نشدم. شاید مراحل رو اشتباه رفتم.
روی پروژه کلیک راست کردم و سپس add و سپس new Item ولی در هیچ یک از بخش ها گزینه Application Manifest را پیدا نکردم.
یک موردی که این روش همون حالتی هست که روی فایل اجرای کلیک راست می کنیم و Run as administrator رو می زنیم؟!!
آخه با این روشم که برنامه رو اجرا کردم باز هم پیغام خطا رو داد. فکر کنم باید قابلیت نوشتن رو به اون فولدر ها بدیم.نمیدونم
پیدا نکردید؟:n13:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]در 2012 هم :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]این کار دقیقا همان Run As Admin هست.
اگر با Run as Admin هم حل نشود مشکل چیز دیگری است. البته آنگاه دیگر مربوط به User نیست. کدتان و متن خطا را قرار دهید.
یک موردی که این روش همون حالتی هست که روی فایل اجرای کلیک راست می کنیم و Run as administrator رو می زنیم؟!!
این کار را نمی توانید بکنید. چرا که در همه ی سیستم ها شما نمی توانید بروید و Permission را تغییر دهید. در محیط های شبکه ای که دیگر هیچ!
با استفاده از نرم افزار هم باز نیاز به مد Admin در پوشه های مورد نیاز فعلی مثل ProgramFiles خواهید داشت.
لازم به یادآوری است که راه اصولی استفاده از AppData برای ذخیره سازی اطلاعات نرم افزار ها است که این پوشه کاملا وابسته به User است و برای هر کاربر متفاوت است. نحوه ی دسترسی : %appdata%
در برنامه نویسی هم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یک راه دیگر نیز برای اطمینان از Admin بودن و توانایی هندل آن توسط Process شما (یعنی مجوز ها به آن داده می شود یا خیر) این است که Principle برنامه را در خط اول Main تغییر دهید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فضای نام های زیر را نیز نیاز دارید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.
shadmehrshadow1
26-01-2014, 20:33
متاسفانه برای من نیست :n27:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
آدرس تصویر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
راه دیگه ای برای اضافه کردن این بخش نیست؟ مثلا کلید ترکیبی و یا . . . . ؟ :n29:
V i r u s e r
27-01-2014, 15:50
شما روش اشتباهی رو در پیش گرفتی
اولا ساختن فایل در دایرکتوری های اصلی ویندوز کاری غیر حرفه ای هست و درست نیست.
دوما درخواست دسترسی ادمین برای برنامه ای که بهش احتیاج نداره مشکلات امنیتی داره و توصیه نمیشه.
سوما پیدا کردن همچین فایلی برای یک کاربر خیلی راحته و استفاده از این روش ساختن فایل و .. باعث میشه تا کاربر بتونه خیلی راحت با اجرای برنامه در Sandbox محدودیت رو دور بزنه.
کاری که شما باید بکنی اینه که یک کلید رمز گذازی شده در رجیستری ایجاد کنی که کاربر حتی وقتی کلید رو پیدا کرد نتونه با پاک کردنش محدودیت رو دور بزنه. یعنی اگر کلید پیدا نشد با پیغام خطا از برنامه خارج بشه.
این کلید باید از نوع بانری باشه و محتویاتش اخرین زمان اجرای برنامه و تعداد دفعات اجرا باشه و البته رمز گذاری شده.
در یک کلید دیگه هم باید اخرین زمان اجرای برنامه رو ذخیره کنی.
حالا هنگام اجرا زمان اخرین اجرای برنامه رو در دو کلید با هم مقایسه می کنی و اگر مچ بودن یعنی کلید دستکاری نشده و برنامه اجرا میشه.
اگر هم کلید وجود نداشت یا خراب بود خیلی ساده برنامه فرض می کنه که کاربر تمام محدودیتش رو استفاده کرده.
کلید ها باید در HKEY_LOCAL_USER ذخیره بشن تا به هر یوزر محدودیت جداگانه داده بشه.
برای امنیت بیشتر می تونید یک فایل در کنار فایل اجرایی هم ایجاد کنید و با کلید مقایسه کنید.
این یک روش ساده برای ایجاد محدودیت هست و به دسترسی ادمین هم احتیاجی نیست.
البته این روشی که گفتم هم خیلی راحت قابل دور زدنه ولی به راحتی ایجاد تک فایل هم نیست
shadmehrshadow1
27-01-2014, 18:54
اولا ساختن فایل در دایرکتوری های اصلی ویندوز کاری غیر حرفه ای هست و درست نیست.
از چه نظ غیر حرفه ای هست؟
سوما پیدا کردن همچین فایلی برای یک کاربر خیلی راحته و استفاده از این روش ساختن فایل و .. باعث میشه تا کاربر بتونه خیلی راحت با اجرای برنامه در Sandbox محدودیت رو دور بزنه.
متاسفانه من با برنامه Sandbox آشنایی ندارم. ولی فکر نکنم پیدا کردن یک فایل با نام نا متعارف و اون هم در بین اون همه فایل سیستمی کار راحتی باشه.
کاری که شما باید بکنی اینه که یک کلید رمز گذازی شده در رجیستری ایجاد کنی که کاربر حتی وقتی کلید رو پیدا کرد نتونه با پاک کردنش محدودیت رو دور بزنه. یعنی اگر کلید پیدا نشد با پیغام خطا از برنامه خارج بشه.
به طور طبیعی وقتی برنامه برای اولین بار اجرا میشه ان کلید وجود نداره و باید ابتدا اون کلید ساخته بشه. یعنی برنامه باید چک بکنه که کلید وجود داره و اگه وجود داشت یک رقم به رقم قبلی اضافه کنه . و اگه وجود نداشت ، مشکل اینجا ایجاد میشه که اگر فایل کلید وجود نداشت ما از کجا باید بفهمیم که این کلید حذف شده و یا چون برنامه برای اولین باره که اجرا میشه و باید کلید رو بسازیم تا مقداری را درونش ایجاد کنیم.
بنا براین باز هم وضعیت برابر هست و این مشکلاتی که شما گفتید برای هر دو حالت است و کاربر میتونه کلید رو حذف کنه.
در یک کلید دیگه هم باید اخرین زمان اجرای برنامه رو ذخیره کنی.
آخرین زمان اجرای برنامه رو هم میشه به راحتی با تغییر تاریخ سیستم حل کرد و خیلی راحت میشه دور زد . به نظر این روش زیاد جوابگو نیست.
با این حال ممنون از راهنماییتون . راستش من زیاد آشنایی با کار با رجیستری ندارم. اگه یه چنین نمونه ای دارید ممنون میشم اگه قرار بدید تا استفاده کنیم.
اگر هدف استفاده از فایلها یا رجیستری یا هر چیز دیگری باشد راهکار همین هاست چه فرمایش V i r u s e r باشد چه کارهای دیگر. اما بیان ایشان نیز همین مطلب را بیان می کند. یعنی به ازای هر User، یعنی چه HKEY_LOCAL_USER و چه AppData که هر کدام مختص یک user خاص است. نکته رمز گذاری ذکر شده را نیز فراموش نکنید.
لازم به ذکر است که پوشه ی ProgramData نیز دسترسی های UAC را نیاز ندارد و می توان از آن نیز برای ذخیره سازی وضعیت برنامه ها در برخی حالات استفاده نمود.
در VB فایل Application Manifest به صورت دیگری است: در Properties پروژه و سپس از بخش Application گزینه ی Veiw Windows Setting را بزنید تا XML مورد نظر باز شود.
در هر صورت صرفه نظر کردن از مطلب آموزشی دسترسی های مدیریتی، استفاده از نرم افزار های Trial ساز نظیر Intelli lock و DotNet Reactor نیز می تواند گزینه ی مناسبی جهت حل مورد شما باشد.
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.