PDA

View Full Version : اگه برنامه شما در پوشه ProgramFiles ویستا درست کار نمی کنه، این پست رو ببینید.



جواد ملاولی
پنج شنبه 19 شهریور 1388, 07:40 صبح
سلام.
یکی از مسائلی که برنامه نویسها در ویندوز ویستا بهش برخورد می کنند مسأله UAC یا همون User Account Control است که بطور پیش فرض فعاله. به بیان ساده مفهومش اینه که اگه برنامه ما در پوشه ProgramFiles یا پوشه Windows باشه و بخوایم در این پوشه کارهایی مثل نوشتن در دیتا بیس، تغییر یک فایل و ... انجام بدیم، ویندوز ویستا این اجازه رو به ما نمیده؛ دلیلش هم اینه که برنامه ها در حالت پیش فرض، با مجوز کاربر استاندارد «Standard User» اجرا میشن و از طرفی برای تغییر یک فایل در این پوشه ها باید برنامه ما با مجوز Admin اجرا بشه. ( البته مجوز استاندارد محدودیتهای دیگه هم داره؛ مثلا اجازه تغییر بعضی از قسمتهای رجیستری رو نداره و ...)
و اما راه برطرف کردن این مشکل:
- بصورت دستی: در این حالت برای اجرای برنامه ها با مجوز Admin، روی فایل اجرایی برنامه کلیک راست می کنیم و Run As Administrator رو انتخاب می کنیم.
- از طریق برنامه نویسی (که برنامه ما خود به خود با مجوز Admin اجرا بشه): باید یک سری کارها رو انجام بدیم که همه ی این کارها رو این برنامه که آپلود کردم انجام میده؛ فقط کافیه فایل پروژه رو - که با پسوند dpr هستش- درگ کنیم روی فایل اجرایی این برنامه. بعدش هم باید پروژه رو یک بار کامپایل کنیم.
امیدوارم به درد دوستان بخوره.
راستی منبع این مطلب سایت delphi.about.com هست.
موفق باشید

alialirezaee1
چهارشنبه 06 آبان 1388, 22:39 عصر
سلام.
یکی از مسائلی که برنامه نویسها در ویندوز ویستا بهش برخورد می کنند مسأله UAC یا همون User Account Control است که بطور پیش فرض فعاله. به بیان ساده مفهومش اینه که اگه برنامه ........- از طریق برنامه نویسی (که برنامه ما خود به خود با مجوز Admin اجرا بشه): باید یک سری کارها رو انجام بدیم که همه ی این کارها رو این برنامه که آپلود کردم انجام میده؛ فقط کافیه فایل پروژه رو - که با پسوند dpr هستش- درگ کنیم روی فایل اجرایی این برنامه. بعدش هم باید پروژه رو یک بار کامپایل کنیم.
امیدوارم به درد دوستان بخوره.
راستی منبع این مطلب سایت delphi.about.com هست.
موفق باشید
سلام
من همه این کارها رو انجام دادم ولی مشکلم حل نشد.
dpr رو درگ کردم روی project1.exe و بعد project1.manifest رو گذاشتم کنار برنامه خودم(project1) برنامه رو یه بار دیگه کامپایل کردم. ولی درست نشد.

لطفا بگید کجای کارم ایراد داره.

vcldeveloper
پنج شنبه 07 آبان 1388, 00:02 صبح
ظاهرا این برنامه فقط یک Manifest به پروژه اضافه میکنه. اتفاقا اگر برنامه شما Manifest نداشته باشه، شانس کار کردنش بیشتر هست، چون برنامه بدون Manifest از نظر ویستا یک برنامه قدیمی محسوب میشه، و ویندوز امکاناتی برای اجرای اینگونه برنامه های قدیمی در نظر میگیره؛ فرضا اگر یک برنامه قدیمی بخواد در Program Files چیزی بنویسه، ویندوز ویستا و ویندوز 7 بجای نوشتن در این پوشه، داده ها را در یک Virtual Store ذخیره می کنند. برنامه خودش فکر میکنه که در این پوشه داره مینویسه، ولی عملا داده ها جای دیگه ایی داره ذخیره میشه. همین کار را اگر یک برنامه بدون مجوز مدیر ولی دارای Manifest انجام بده، بلافاصله با پیام خطا مواجه میشه.

یک برنامه خوب باید تا حد امکان از انجام اموری که مربوط به حوزه های مدیریتی میشه، اجتناب کنه (غیر از بعضی از نرم افزارهای سیستمی که اصولا برای کارهای مدیریتی طراحی شدند). اگر هم فرضا جایی نیاز به انجام اموری با مجوز مدیر داشت، باید در همان مرحله تقاضای Elevation بکنه، نه اینکه یک برنامه ساده اداری بخاطر اینکه برنامه نویسش بلد نیست، یا حوصله نداره خودش را با اصول برنامه نویسی تحت ویندوز هماهنگ کنه، از همون لحظه اول که اجرا میشه، بیخودی تقاضای مجوز مدیر بکنه!

بجای این کارها باید شیوه برنامه نویسی تان را تغییر بدید، پوشه Program Files پوشه ایی برای نگهداری تنظیمات برنامه یا فایل های داده نیست، در ویندوز پوشه AppData برای این کار در نظر گرفته شده. برنامه نویسانی که قبلا در Program Files داده های خودشان را می نوشتند، به مستندات و توصیه های مایکروسافت توجه نمی کردند.

alialirezaee1
پنج شنبه 07 آبان 1388, 09:44 صبح
ظاهرا این برنامه فقط یک Manifest به پروژه اضافه میکنه. اتفاقا اگر برنامه شما Manifest نداشته باشه، شانس کار کردنش بیشتر هست، چون برنامه بدون Manifest از نظر ویستا یک برنامه قدیمی محسوب میشه، و ویندوز امکاناتی برای اجرای اینگونه برنامه های قدیمی در نظر میگیره؛ فرضا اگر یک برنامه قدیمی بخواد در Program Files چیزی بنویسه، ویندوز ویستا و ویندوز 7 بجای نوشتن در این پوشه، داده ها را در یک Virtual Store ذخیره می کنند. برنامه خودش فکر میکنه که در این پوشه داره مینویسه، ولی عملا داده ها جای دیگه ایی داره ذخیره میشه. همین کار را اگر یک برنامه بدون مجوز مدیر ولی دارای Manifest انجام بده، بلافاصله با پیام خطا مواجه میشه.

یک برنامه خوب باید تا حد امکان از انجام اموری که مربوط به حوزه های مدیریتی میشه، اجتناب کنه (غیر از بعضی از نرم افزارهای سیستمی که اصولا برای کارهای مدیریتی طراحی شدند). اگر هم فرضا جایی نیاز به انجام اموری با مجوز مدیر داشت، باید در همان مرحله تقاضای Elevation بکنه، نه اینکه یک برنامه ساده اداری بخاطر اینکه برنامه نویسش بلد نیست، یا حوصله نداره خودش را با اصول برنامه نویسی تحت ویندوز هماهنگ کنه، از همون لحظه اول که اجرا میشه، بیخودی تقاضای مجوز مدیر بکنه!

بجای این کارها باید شیوه برنامه نویسی تان را تغییر بدید، پوشه Program Files پوشه ایی برای نگهداری تنظیمات برنامه یا فایل های داده نیست، در ویندوز پوشه AppData برای این کار در نظر گرفته شده. برنامه نویسانی که قبلا در Program Files داده های خودشان را می نوشتند، به مستندات و توصیه های مایکروسافت توجه نمی کردند.

من در program files نمی خوام چیزی بنویسم. فقط سریال هارد رو می خوام بخونم که در administrator می خونه ولی در یوزری مثل Ali نمی تونه بخونه.
سریال هارد رو برای قفل می خوام

vcldeveloper
پنج شنبه 07 آبان 1388, 11:04 صبح
من در program files نمی خوام چیزی بنویسم. فقط سریال هارد رو می خوام بخونم که در administrator می خونه ولی در یوزری مثل Ali نمی تونه بخونه.
فرقی در بحث نمیکنه، شما باید فقط زمانی که نیاز به خواندن سریال هارد دارید، درخواست Elevation کنید، نه اینکه برنامه در تمام مدت اجرا خود دارای مجوزهای Admin باشه!

alialirezaee1
پنج شنبه 07 آبان 1388, 11:59 صبح
فرقی در بحث نمیکنه، شما باید فقط زمانی که نیاز به خواندن سریال هارد دارید، درخواست Elevation کنید، نه اینکه برنامه در تمام مدت اجرا خود دارای مجوزهای Admin باشه!

من هم همان بار اول که برنامه اجرا می شود می خوام سریال هارد رو بخونم یعنی یه بار سریال هارد خونده می شه و دیگه کاری به admin ندارم.
در ضمن نمی خوام به کاربر بگم که برنامه رو تحت admin اجرا کنه. می خوام برنامه این کارو انجام بده.

vcldeveloper
جمعه 08 آبان 1388, 02:55 صبح
در ضمن نمی خوام به کاربر بگم که برنامه رو تحت admin اجرا کنه. می خوام برنامه این کارو انجام بده. در صورت فعال بودن UAC، برنامه برای خودش دسترسی Admin به دست نمیاره، بلکه درخواست Elevation میکنه، ویندوز هم به کاربر اطلاع میده که این برنامه میخواد به چیزی در سطح Admin دسترسی داشته باشه، و اگر کاربر موافقت کرد، ویندوز اجازه ارتقاء دسترسی Process رو میده.
اگر قرار بود برنامه همینطوری برای خودش دسترسی Admin بدست بیاره که وجود UAC بی معنی میشد!

alialirezaee1
شنبه 09 آبان 1388, 01:56 صبح
در صورت فعال بودن UAC، برنامه برای خودش دسترسی Admin به دست نمیاره، بلکه درخواست Elevation میکنه، ویندوز هم به کاربر اطلاع میده که این برنامه میخواد به چیزی در سطح Admin دسترسی داشته باشه، و اگر کاربر موافقت کرد، ویندوز اجازه ارتقاء دسترسی Process رو میده.
اگر قرار بود برنامه همینطوری برای خودش دسترسی Admin بدست بیاره که وجود UAC بی معنی میشد!

من که شماره سریال هارد رو request می دم هیچ پیغامی نمیده که بخواد اجازه دسترسی بگیره و مثلا edit1.text رو خالی نشون می ده. تو یوزر administrator نشون می ده ولی تو یوزر ali نه.
در این صورت باید چه کار کنم؟

vcldeveloper
شنبه 09 آبان 1388, 18:49 عصر
من که شماره سریال هارد رو request می دم هیچ پیغامی نمیده که بخواد اجازه دسترسی بگیره و مثلا edit1.text رو خالی نشون می ده.
خودش خود به خود اجازه نمیگیره، شما باید خودتان بدانید که چه کارهایی نیاز به دسترسی مدیریتی دارد و قبل از انجام آن، از ویندوز درخواست مجوز کنید. اگر بدون درخواست، عمل مربوطه را انجام بدید، ویندوز آن عمل را با موفقیت انجام نمیده.

Felony
شنبه 09 آبان 1388, 19:33 عصر
خودش خود به خود اجازه نمیگیره، شما باید خودتان بدانید که چه کارهایی نیاز به دسترسی مدیریتی دارد و قبل از انجام آن، از ویندوز درخواست مجوز کنید. اگر بدون درخواست، عمل مربوطه را انجام بدید، ویندوز آن عمل را با موفقیت انجام نمیده.
جناب کشاورز من تا به حال تو ویندوز ویستا برنامه نویسی نکردم ، فقط جهت کنجکاوی میخوام بدونم که برای این کار API خاصی در نظر گفته شده ؟ باید پیغام خاصی برای گرفتن دسترسی ارسال کرد ؟
ممنون میشم توضیح بدید یا منبعی معرفی کنید .

vcldeveloper
شنبه 09 آبان 1388, 23:35 عصر
جناب کشاورز من تا به حال تو ویندوز ویستا برنامه نویسی نکردم ، فقط جهت کنجکاوی میخوام بدونم که برای این کار API خاصی در نظر گفته شده ؟ باید پیغام خاصی برای گرفتن دسترسی ارسال کرد ؟
ممنون میشم توضیح بدید یا منبعی معرفی کنید . http://www.delphi.org.nz/file.php/1/VistaUACandDelphi.pdf
http://delphi.wikia.com/wiki/Delphi_and_Vista