PDA

View Full Version : سوال: مشکل در پیدا کردن مسیر فایل



sajioo
شنبه 28 اسفند 1389, 18:50 عصر
سلام
دوستان عزیز من در حال نوشتن یک برنامه هستم که وقتی ویندوز بالا میاد به صورت خود کار اجرا می شه و پس از دریافت یک سری اطلاعات از یک فایل متنی کاری رو انجام میده.
مشکل من اینجاست که وقتی روی آیکون این نرم افزار کلیک می کنم راحت اجرا می شه و یک سری فایل که قرار است پیدا بشه رو پیدا می کنه ، اما وقتی به صورت خودکار و با اجرای ویندوز برنامه خودکار اجرا می شه پیام می ده که فایل مورد نظر رو پیدا نمیکنه؟
نمیدونم عیب از کجاست؟:متفکر:
ولی اینو مطمئنم که موقعی که به صورت خودکار اجرا میشه فایل ها رو پیدا نمیکنه.
میشه یکی بهم کمک کنه؟
واقعا احتیاج دارم:ناراحت:

BORHAN TEC
شنبه 28 اسفند 1389, 19:31 عصر
برای اجرا شدن خودکار برنامه از چه روشی استفاده کرده اید؟؟؟
پوشه Startup یا رجیستری و یا...؟؟؟

sajioo
شنبه 28 اسفند 1389, 19:42 عصر
از این پروسیجر استفاده کردم



procedure RunOnStartup(sProgTitle,sCmdLine:string;bRunOnce:b oolean);
var
sKey : string;
reg : TRegIniFile;
begin
if( bRunOnce )then
sKey := 'Once'
else
sKey := '';
reg := TRegIniFile.Create('');
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.WriteString('Software\Microsoft\Windows\Curren tVersion\Run' + sKey + #0,sProgTitle,sCmdLine );
reg.Free;
end;

fire.angle
شنبه 28 اسفند 1389, 20:19 عصر
سلام

دقت کنید که در هنگام فراخوانی تابع RunOnStartup اگر مقدار پارامتر bRunOnce برابر True باشه اونوقت کلید مورد نظر در شاخه RunOnce ایجاد میشه
درصورتی که باید کلید شما در شاخه Run ایجاد بشه

علتش همینه

برنامه رو به شکل زیر تغییر بده و یونیت Registry رو هم اضافه کن . کدهای زیر رو میتونید توی یه دکمه بزارید و امتحان کنید

var
reg:TRegistry;
begin
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\Run',false);
reg.WriteString('Caption','value');
reg.Free;

Mask
شنبه 28 اسفند 1389, 20:58 عصر
لطفا دقت کنید:

با اجرای ویندوز برنامه خودکار اجرا می شه پیام می ده که فایل مورد نظر رو پیدا نمیکنه؟
این صحبت نشون میده برنامشون اجرا میشه . در ضمن چه آدرس فایل تو Run باشه و چه تو Run Once در هر دوحالت برنامه اجرا میشه.
مشکل ایشون رو هم من قبلن داشتم.
در برنامه ای که من نوشته بودم از کد زیر برای پیدا کردن شاخه skin استفاده میکردم.

GetCurrentDir+'/skins/*.*'
برنامه که اجرا میشد مشکلی نداشت اما وقتی میزاشتم تو Start up شاخه اسکین رو پیدا نمیکرد.
میدونید چرا :
چون : دستور GetCurrentDir اشاره میکنه به مسیر فعلی ... که زمانی که ویندوز بالا میاد مسیر فعلی مسیر برنامه شما نیست و قاعدتا فایلهای مربوطه رو پیدا نمیکنه.
اما وقتی که کاربر دستی فایل رو اجرا کنه چون shell مسیر جاری رو به سمت مسیر برنامه شما میبره برنامتون اجرا میشه.
برای رفع این مشکل از دستور زیر جهت آدرس دهی استفاده کنید.

ExtractFilePath(Application.ExeName)+'File.exe'
موفق باشید.

sajioo
شنبه 28 اسفند 1389, 22:05 عصر
دوستان عزیز ممنون از راهنمای هاتون
اما بازم نشد.
چکار کنیم؟ کسی نیست کمکم کنه؟:گریه:
ارور زیررو میده
67689

M_Maskout
یک شنبه 29 اسفند 1389, 08:50 صبح
سلام
یه پیشنهاد اینکه یه جوری مطمئن بشین، خطای نمایش داده شده حتماً بخاطر همون چیزی هست که فکر می‌کنید.
برای اینکار یه log فایل درست کنید و تو جاهای مختلف برنامه یه مشخصه خاصی توی اون بنویسین (مثلاً یه شماره منحصر که در هر قسمت که می‌خواین این کار رو بکنید یه واحد اضافش کنید). این فایل رو هم تو یه مسیر مشخص (مثلاً \:D) ذخیر کنید و الی آخر.

اگر واقعاً مشکل از پیدا نکردن مسیر فایل هست، می‌تونید مسیر مورد نظرتون رو هم توی رجیستری ذخیره کنید و برنامه قبل از اینکه بخواد سراغ فایل‌ها بره، مسیر اونا رو از رجیستری پیدا کنه.
دستوری هم که Gold تو پست 5# گفته اصولاً بهترین راه کار برای بدست آوردن یه مسیر پیش فرض و خوبه.

ExtractFilePath(Application.ExeName)

به عنوان مثال، فایل رو، اینجوری باز کنین:

App_Path := ExtractFilePath(Application.ExeName);
Assign(MyFile, App_Path+'FileName.TXT');
Reset(MyFile);

اینجوری قطعاً مسیر تثبیت می‌شه.

sajioo
یک شنبه 29 اسفند 1389, 10:42 صبح
دوستان عزیز با تشکر فراوان از راهنمای هاتون
راستش آدرس مورد نظر رو در یک label نمایش دادم و متوجه شدم که آدرس درسته و تشکر میکنم از gold عزیز به خاطر راهنمایش.
اما نمی فهمم چرا این ارور رو باز میده ؟
اگه کسی میدونه منو راهنمای کنه؟
دوست دارم تا قبل پایان سال تمومش کنم انشاالله:چشمک:

BORHAN TEC
یک شنبه 29 اسفند 1389, 10:43 صبح
برای اینکار یه log فایل درست کنید و تو جاهای مختلف برنامه یه مشخصه خاصی توی اون بنویسین (مثلاً یه شماره منحصر که در هر قسمت که می‌خواین این کار رو بکنید یه واحد اضافش کنید). این فایل رو هم تو یه مسیر مشخص (مثلاً \:D) ذخیر کنید و الی آخر.

توجه داشته باشید در نسخه جدید دلفی به جای این کارها می توان از ابزار CodeSite Express استفاده کرد که کار با آن بسیار ساده است.

M_Maskout
یک شنبه 29 اسفند 1389, 10:56 صبح
از عکسی گذاشتین، به نظر میاد از ویندوز ویستا دارین استفاده می‌کنین، امکان داره این مشکل به خاطر محدودیت‌های (احمقانه!) ویستا باشه.
اگر ویندوزتون، ویستا هست، سعی کنید برنامه رو Run As Administrator کنید...

sajioo
یک شنبه 29 اسفند 1389, 11:16 صبح
دوستان عزیزم از راهنمای هاتون ممنون.
بله از ویندوز ویستا استفاده می کردم و از کاری که gold بهم گفت نیز استفاده کردم.
مشکلم حل شد.
بسیار بسیار سپاسگذارم.:لبخند:

vcldeveloper
یک شنبه 29 اسفند 1389, 11:20 صبح
امکان داره این مشکل به خاطر محدودیت‌های (احمقانه!) ویستا باشه.
محدودیت در نوشتن در شاخه HKLM احمقانه نیست، از اولش هم قرار نبوده که هر برنامه ایی سرش رو بندازه پایین و هر جا هر چی دلش خواست، بدون درخواست دسترسی های لازم، بنویسه. درباره چیزهایی اظهار نظر کنید که درباره شون اطلاعات کافی داشته باشید.

M_Maskout
یک شنبه 29 اسفند 1389, 14:02 عصر
دوستان عزیزم از راهنمای هاتون ممنون.
بله از ویندوز ویستا استفاده می کردم و از کاری که gold بهم گفت نیز استفاده کردم.
مشکلم حل شد.
بسیار بسیار سپاسگذارم.:لبخند:

دوست عزیز، من gold نیستم! البته جناب gold، بی شک عزیز ماست.

M_Maskout
یک شنبه 29 اسفند 1389, 14:06 عصر
محدودیت در نوشتن در شاخه HKLM احمقانه نیست، از اولش هم قرار نبوده که هر برنامه ایی سرش رو بندازه پایین و هر جا هر چی دلش خواست، بدون درخواست دسترسی های لازم، بنویسه. درباره چیزهایی اظهار نظر کنید که درباره شون اطلاعات کافی داشته باشید.

قطعاً حق با شماست، ولی اگر این یه جور اشکال نبود، تو ویندوز سون تعدیل نمی‌شد.
تو سون، بطور پیش فرض، محدودیت‌های کمتری لحاظ شده یا شاید هم اشکالات قبلی گرفته شده.
ولی بازم تایید می‌کنم که این که نوشتید کاملاً درسته. منتها منظور بنده، عدم اجازه اجرای برنامه‌ها در ابتدای ویندوز هست که ظاهراً باید مجوز مایکروسافت داشته باشن، لااقل در این مورد که این بنده خدا با نوشتن تو رجیستری مشکل نداشته، فقط با اجرای برنامه در شروع کار ویندوز مشکل داشته...

vcldeveloper
یک شنبه 29 اسفند 1389, 16:58 عصر
قطعاً حق با شماست، ولی اگر این یه جور اشکال نبود، تو ویندوز سون تعدیل نمی‌شد.
در ویندوز 7 محدودیت های امنیتی کم نشد، بلکه تعداد دفعاتی که از کاربر درباره آنها پرسش میشه، کاهش پیدا کرد.


منتها منظور بنده، عدم اجازه اجرای برنامه‌ها در ابتدای ویندوز هست که ظاهراً باید مجوز مایکروسافت داشته باشن، لااقل در این مورد که این بنده خدا با نوشتن تو رجیستری مشکل نداشته، فقط با اجرای برنامه در شروع کار ویندوز مشکل داشته...
برای اجرای برنامه در هنگام شروع به کار ویندوز، نیازی به مجوز مایکروسافت نیست؛ بلکه شما برای این کار در شرایط عادی باید داده مورد نظرتان را در شاخه HKCU بنویسید، نه HKLM. وقتی میخواید در HKLM بنویسید، باید از ویندوز درخواست مجوز مدیر کنید. اگر کاربر مربوطه مدیر بود، پیامی از طرف ویندوز دریافت میکنه، و اگر پیام را تایید کرد، شما اجازه نوشتن در اون شاخه را پیدا می کنید.

در مورد اون کاربری که سوال پرسید، مشکل اصلا این چیزها نبوده، بلکه مشکل اشتباه خودِ کاربر بوده که از GetCurrentDirectory برای به دست آوردن مسیر فایل مربوطه استفاده کرده، که کار غلطی هست.