PDA

View Full Version : دسترسی به HKEY_LOCAL_MACHINE در ویندوز 7 و Vista



sattaryekta
سه شنبه 28 دی 1389, 14:25 عصر
با سلام

در ویندوز Seven و Viste :
کلاس TRegistry برای خواندن و نوشت در HKEY_LOCAL_MACHINE دچار مشکل می شود.
به عنوان مثال کامپوننت mxProtector در HKEY_LOCAL_MACHINE قادر به خواندن و نوشتن نیست ولی در HKEY_CURRENT_USER به خوبی کار می کند.

یک راه حل این هست که با کلیک راست روی فایل کامپایل شده (exe) با گزینه Run As Administrator برنامه را اجرا کرد. ولی این راه خوبی نیست. آیا راه دیگری برای این مشکل هست؟

vcldeveloper
سه شنبه 28 دی 1389, 17:58 عصر
آیا راه دیگری برای این مشکل هست؟
این مشکل نیست؛ کاربری که دسترسی Admin نداره، حق نوشتن در HKLM را نداره. برنامه شما باید تنظیماتش را در شاخه HKCU ذخیره کنه، و اگر نیاز به دسترسی به HKLM داره، با تغییر مانیفست فایل EXE، سطح دسترسی مورد نیازش را روی Administrator تنظیم کنید. در صورتی که به دسترسی Admin نیاز داشته باشه، و UAC ویندوز هم فعال باشه، قبل از اجرای برنامه پیامی برای تایید درخواست به کاربر نمایش داده میشه.

sattaryekta
چهارشنبه 29 دی 1389, 13:45 عصر
این مشکل نیست؛

چرا میزنی؟!


برنامه شما باید تنظیماتش را در شاخه HKCU ذخیره کنه

موقتاً برای حل این ... همین راه را استفاده کرده ام. یعنی در HKCU اطلاعات را می نویسم.
دیتای مورد نظر، اطلاعات مربوط به شماره سریال، کد فعال سازی و روزهای باقیمانده از نسخه تریال هست که حتماً باید در HKLM ذخیره شوند در غیر اینصورت این قفل نرم افزاری درست عمل نخواهد کرد. منظرم کامپوننت mxProtector هست.


و اگر نیاز به دسترسی به HKLM داره، با تغییر مانیفست فایل EXE، سطح دسترسی مورد نیازش را روی Administrator تنظیم کنید.
آیا برای این کار برنامه باید در سیستم عامل مورد نظر یعنی ویستا یا سون کامپایل شود؟ یا اینکه باید روی تنظیمات Propeties خود فایل exe ، این دسترسی ها را اعمال کرد؟ اگر منظور شما راه دوم است من این کار را در Windows7 انجام دادم ولی جواب نداد. و اگر منظور شما راه اول است، در صورت امکان توضیح بیشتری دهید.

ashoori
پنج شنبه 30 دی 1389, 10:33 صبح
با تغییر مانیفست فایل EXE، سطح دسترسی مورد نیازش را روی Administrator تنظیم کنید
چه طور میشه این کار رو انجام داد!؟

vcldeveloper
پنج شنبه 30 دی 1389, 12:18 عصر
آیا برای این کار برنامه باید در سیستم عامل مورد نظر یعنی ویستا یا سون کامپایل شود؟
خیر.


یا اینکه باید روی تنظیمات Propeties خود فایل exe ، این دسترسی ها را اعمال کرد؟

چه طور میشه این کار رو انجام داد!؟
Manifest یک سند XML هست که به صورت Resource به فایل EXE شما اضافه میشه. همین عبارت را اگر در سایت یا در تالار دلفی جستجو کنید، درباره چگونگی ساختنش توضیح داده شده.

sattaryekta
شنبه 02 بهمن 1389, 11:44 صبح
آیا اسکریپت زیر برای دسترسی مورد نظر ما کافیست؟



<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0]
<assemblyIdentity version="1.1.1.1"
processorArchitecture="X86"
name="YourApplicationExeName"
type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2]
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo> </assembly>

vcldeveloper
شنبه 02 بهمن 1389, 16:56 عصر
آیا اسکریپت زیر برای دسترسی مورد نظر ما کافیست؟برای دسترسی، بله، ولی برای اینکه بتونید در پروژه خودتون از این استفاده کنید، باید گزینه مربوط به فعال کردن Runtime theme را در تنظیمات پروژه غیرفعال کنید، تا دو سند مانیفست ایجاد نشه. اگر اون گزینه را غیرفعال کنید، در ظاهر برنامه تان از کنترل های کلاسیک ویندوز به جای کنترل های جدید ویندوز XP، ویستا، و 7 استفاده میشه. اگر میخواید اون ظاهر رو هم حفظ کنید، باید گزینه مربوط به فعال کردن Theme را هم اضافه کنید:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.1.1" processorArchitecture="X86" name="YourAppFile" type="win32"/>
<description>Your App Title</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

mohsen24000
شنبه 02 بهمن 1389, 17:10 عصر
باید گزینه مربوط به فعال کردن Runtime theme را در تنظیمات پروژه غیرفعال کنید
آیا در دلفی 6 هم این قابلیت وجود داره!؟
چون وقتی فایل resource حاوی کدهای xml رو به پروژه اضافه میکنم در exe فایل دو کد xml ظاهر میشه یکی بنام مانیفست و دیگری xml!؟

sattaryekta
دوشنبه 04 بهمن 1389, 09:12 صبح
اگر اون گزینه را غیرفعال کنید، در ظاهر برنامه تان از کنترل های کلاسیک ویندوز به جای کنترل های جدید ویندوز XP، ویستا، و 7 استفاده میشه.

پس میشه گفت که خوب کار نکردن کامپوننت هایی مثل VCLSKin در ویندوز 7 یا ویستا را هم میشه بوسیله همین کد حل کرد؟