PDA

View Full Version : اجرای برنامه در حالت run as administrator



sajioo
شنبه 01 تیر 1392, 09:28 صبح
سلام دوستان
برای درست کار کردن برنامه احتیاج دارم که برنامه به حالت run as administrator اجرا بشه یا حداقل طوری باشه که به اون امکانات دسترسی داشته باشه. بجز راه دستی کاری میشه کرد؟
عزیزان موضوع دقیقا اینه که من می خوام برنامه اول مسیر

HKEY_LOCAL_MACHINE/SYSTEM\CurrentControlSet\Control\Nls\CodePage را بره یک سری اطلاعات بگیره.
در رایانه خودم درسته اما در رایانه های دیگه اگه حالت عادی اجرا بشه کار نمیده و اگه RUN AS ADMINISTRATOR بشه جواب میده.

hp1361
شنبه 01 تیر 1392, 10:16 صبح
سلام

توی کدنویسی نمیدونم.اما خودم برای برنامه هام برای ستاپ سازی از Advanced Installer استفاده میکنم و در اون یک گزینه داره کهRUN AS ADMINISTRATOR تیک میخوره!

sajioo
شنبه 01 تیر 1392, 10:21 صبح
خوب بعدش یعنی هر بارکه اجرا بشه باز run as administrator اجرا میشه یا نه فقط بار اول؟

توی کدنویسی نمیدونم.اما خودم برای برنامه هام برای ستاپ سازی از Advanced Installer استفاده میکنم و در اون یک گزینه داره کهRUN AS ADMINISTRATOR تیک میخوره!

Felony
شنبه 01 تیر 1392, 10:59 صبح
در رایانه خودم درسته اما در رایانه های دیگه اگه حالت عادی اجرا بشه کار نمیده و اگه RUN AS ADMINISTRATOR بشه جواب میده.
تو ویندوز های ویستا به بعد بستگی به Level ست شده برای UAC داره ، با تغییر فایل Manifest برنامه میتونید با اجرای برنامتون از کاربر درخواست دسترسی Admin کنید که با هر بار باز شدن برنامه این پیغام نمایش داده میشه و در صورت تائید دسترسی ادمین به برنامه داده میشه ، نه بیشتر از این .

بیشتر از این میشه راهی برای Bypass کردن UAC که رایگان جایی گیر نمیاد .

sajioo
شنبه 01 تیر 1392, 11:04 صبح
تو ویندوز های ویستا به بعد بستگی به Level ست شده برای UAC داره ، با تغییر فایل Manifest برنامه میتونید با اجرای برنامتون از کاربر درخواست دسترسی Admin کنید که با هر بار باز شدن برنامه این پیغام نمایش داده میشه و در صورت تائید دسترسی ادمین به برنامه داده میشه ، نه بیشتر از این .
Felony تشکر از راهنمایی جامعی که دادی
آیا برنامه برای دستکاری در رجیستری باید حتما در حالت run as administrator باز بشه؟
در اصل من قصد تغییر زبان سیستم رو از رجیستری دارم

Felony
شنبه 01 تیر 1392, 11:07 صبح
برای دسترسی به Local Machine بله ، باید دسترسی ادمین باشه چون Local Machine مربوط به تمام کاربران هست ، برای دسترسی به Current User نیازی نیست ، بررسی کنید ببینید کلید مورد نظر نسخه مشابهی در Current User نداره که تنظمیات مورد نظرتون رو برای کاربر جاری اعمال کنه .

sajioo
شنبه 01 تیر 1392, 11:11 صبح
باز هم تشکر از توضیح کامل و مختصرت felony
راستش من مسیر زیر رو دنبال می کنم

HKEY_LOCAL_MACHINE/SYSTEM\CurrentControlSet\Control\Nls\CodePage
گشتم تو user نبود آیا راه دیگه ی است؟
واقعا این زبان فارسی هم دردسر شده ها:عصبانی:

یوسف زالی
شنبه 01 تیر 1392, 12:22 عصر
چرا با RunDll32 زبان رو ست نمی کنید؟

hp1361
شنبه 01 تیر 1392, 12:39 عصر
خوب بعدش یعنی هر بارکه اجرا بشه باز run as administrator اجرا میشه یا نه فقط بار اول؟

سلام

کلا هر بار که برنامه بخواد اجرا بشه run as administrator اجرا خواهد شد.

sajioo
شنبه 01 تیر 1392, 13:01 عصر
چرا با RunDll32 زبان رو ست نمی کنید؟
میشه یک توضیح کوچیک بدی؟؟؟

یوسف زالی
شنبه 01 تیر 1392, 13:28 عصر
خود سیستم ویندوز برای تنظیماتش معمولا از همین روش استفاده می کنه. یعنی اینکه DLL های مربوط به تنظیمات (CPL) ها رو با استفاده از برنامه RunDll32 کال می کنه و بهشون پارامتر پاس می ده.
مثالش باز کردن یک عکس با استفاده از Windows Picture and Fax Viewer هست که با استفاده از ShimgVwr.dll این کار رو می کنه.
اطلاعات بیشتر رو در همین سایت سرچ کنید، همراه با مثال بدست میارید. اتفاقا تنظیمات زبان هم بحث شده..
برای گرفتن اطلاعات زبان ست شده هم خود دلفی فکر می کنم براش راه حل داره.
عوض کردن زبان از روی مثلا انگلیسی به فارسی اگر هر دو نصب باشند هم راه ساده ای داره.
دقیقا می فرمایید چکار می خواهید کنید؟

sajioo
شنبه 01 تیر 1392, 13:58 عصر
برای گرفتن اطلاعات زبان ست شده هم خود دلفی فکر می کنم براش راه حل داره.
عوض کردن زبان از روی مثلا انگلیسی به فارسی اگر هر دو نصب باشند هم راه ساده ای داره.
دقیقا می فرمایید چکار می خواهید کنید؟
دقیقا اگه بخوام بگم مشکل من اینجاست که
بر روی کامپیوتر خودم این کدها رو قرار دادم


RegSetString(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentCon trolSet\Control\Nls\CodePage','ACP','1256');
RegSetString(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentCon trolSet\Control\Nls\CodePage','OEMCP','720');
RegSetString(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentCon trolSet\Control\Nls\CodePage','MACCP','10004');
RegSetString(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentCon trolSet\Control\Nls\Language','Default','0429');
RegSetString(HKEY_CURRENT_USER,'Control panel\International','localename','Fa-IR');
RegSetString(HKEY_CURRENT_USER,'Control panel\International','slanguage','FAR');
RegSetString(HKEY_CURRENT_USER,'Control panel\International','Locale','00000429');
RegSetString(HKEY_CURRENT_USER,'Control panel\International','iCountry','981');
برنامه اطلاعاتی رو که میگیره فارسی نشون میده.
این کدها ، چیزهای بود که برای فارسی نشون دادن اطلاعات باید در رجیستری تغییر می دادم
همین برنامه رو رو رایانه دیگه تست می کنم جواب نمیده.
حالا ریستارت هم کردم بازم فایده نداشت. از run as adminestrator هم استفاده کردم. راستش گیر کردم بد جور

یوسف زالی
شنبه 01 تیر 1392, 14:06 عصر
منظور از نمایش فارسی همون چیزی هست که در وب بروزر مشکل داشتی؟
متن روی دکمه ها چطور؟ فارسیه؟ یا اون هم مشکل داره و سوال سوال می شه؟

sajioo
شنبه 01 تیر 1392, 14:24 عصر
منظور از نمایش فارسی همون چیزی هست که در وب بروزر مشکل داشتی؟
متن روی دکمه ها چطور؟ فارسیه؟ یا اون هم مشکل داره و سوال سوال می شه؟
یوسف جان متن روی باتن های tnt درست نمایش داده میشه
حتی متن داخل وب بروزر هم درسته
اما اطلاعات که در string ذخیره میشه بهم میریزه. مشکل اون string هستش. دلفی 7 استفاده می کنم.
شاید مثلا یک متغییر یونیکد اگه باشه بشه کاری کرد یا شاید .....:متفکر:

یوسف زالی
شنبه 01 تیر 1392, 14:33 عصر
چرا از WideString استفاده نمی کنی؟
باتن های معمولی چطور نمایش داده می شند؟ تست کن بگو

sajioo
شنبه 01 تیر 1392, 15:01 عصر
چرا از WideString استفاده نمی کنی؟
باتن های معمولی چطور نمایش داده می شند؟
باتن معمولی درست نمایش داده نمیشهو wide string هم چک کردم نشده.

یوسف زالی
شنبه 01 تیر 1392, 15:31 عصر
خب علتش همون تنظیمات زبانه.
اگر دستی زبان رو ست کنید درست می شه درسته؟
همین کار رو با RunDll32 کنید. حتما جواب می ده. تا جایی که یادمه این روش یک فایل هم تولید می کرد.
فکر کنم این بود:

http://barnamenevis.org/showthread.php?382496-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%81%D8%B1%D9%85%D8%AA-%D8%B2%D8%A8%D8%A7%D9%86-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-%D8%A8%D8%A7-%D8%AF%D9%84%D9%81%DB%8C&highlight=rundll32

sajioo
شنبه 01 تیر 1392, 15:47 عصر
Procedure SetFarsi;
var
RegOptsFile: TextFile;
TempDir: Array [0 .. MAX_PATH - 1] of char;
Result: string;
WinDir: Array [0 .. MAX_PATH - 1] of char;
Result1: string;
begin
SetString(Result, TempDir, GetTempPath(MAX_PATH, TempDir));
AssignFile(RegOptsFile, TempDir + '\regopts.txt');
ReWrite(RegOptsFile);
WriteLn(RegOptsFile, '[RegionalSettings]');
Write(RegOptsFile, 'UserLocale=00000429');
CloseFile(RegOptsFile);
WinExeC(PansiChar('<span class="highlight">rundll32</span>.exe shell32,Control_RunDLL intl.cpl,,/f:"' + TempDir +
'\regopts.txt" /s:"' + WinDir + '\I386"'), SW_SHOWNORMAL);
end;

از این کد استفاده کردم اما فارسی نشد.ریستارت هم کردم نشد.
شاید واقعا راهی نداره که توی چند تا رایانه جواب بده:ناراحت:
حتی با این روش format در region and languageتغییر نکرد

sajioo
شنبه 01 تیر 1392, 15:53 عصر
یوسف جان یک چیز نظر منو خیلی جلب کرده ولی نمی دونم شاید کاملا بی ربط باشه
وقتی دستی region and language بخش format رو به پرشین تبدیل می کنم
first day of week = السبت
و وقتی با برنامه و رجیستری این کارو می کنم
first day of week = یکشنبه
میشه.
در حالت اول که دستی است تو هر کامپیوتری برنامه درست کار میده اما در حالت دوم نه.
می خوام بگم شاید این وسط یک چیز دیگه هم تغییر می کنه ما تغییر نمیدیم

یوسف زالی
شنبه 01 تیر 1392, 15:58 عصر
یک کار کن، یک برنامه مونیتورینگ رجیستری نصب کن هر دو مورد رو چک کن و لاگ بگیر ببین چه فرقی دارن،
نتیجش رو بذار همین جا، بررسیش کنیم.

okhdar
شنبه 02 شهریور 1392, 20:36 عصر
قربان این تیک کجاست؟