PDA

View Full Version : خطای اتصال به database هنگام راه اندازی ویندوز



اوبالیت به بو
دوشنبه 26 مرداد 1394, 16:01 عصر
درود بر شما

برنامه باید به محض راه اندازی ویندوز اجرا بشه و پیغام های هشدار مربوطه را بده. ما در رجیستری بوسیله این دستور برنامه را ثبت کردیم:

RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
public MainForm()
{
reg.SetValue("MachinesInsurances", Application.ExecutablePath.ToString());

InitializeComponent();
}



حالا وقتی ویندوز راه اندازی میشه و برنامه خودکار اجرا میشه، با پیغام خطا مواجه میشیم. باید برنامه را ببندیم. وقتی برنامه دوباره باز میشه به درستی کار می کنه. مشکل از چیه؟ ما چطور می تونیم این مساله را حل کنیم؟

با تشکر

134374

محمد آشتیانی
دوشنبه 26 مرداد 1394, 16:10 عصر
سلام
احتمالا به این دلیل که در استارت آپ ویندوز برنامه شما زودتر از سرویس اسکیوال اجرا میشه
کافیه حتی یک میلی ثانیه سرویس اسکیوال دیرتر از برنامه شما استارت بشه تا این خطا رو ببینید.


برای ویندوز سرویس ها میشه Dependency تعریف کرد، یعنی اجرای یک سرویس وابسته به اجرا شدن سرویس دیگری باشه ، اما برای ویندوز اپلیکیشن و یک سرویس نمیدونم همچین امکانی هست یا خیر
میتونید توبرنامه خودتون اگر در اولین اتصال خطارخ داد ،خطا رو مدیریت کنید و چند ثانیه بعد دوباره به دیتابیس انجین متصل بشید (پیاده سازیش سادست)


موفق باشید

اوبالیت به بو
دوشنبه 26 مرداد 1394, 16:15 عصر
سلام
احتمالا به این دلیل که در استارت آپ ویندوز برنامه شما زودتر از سرویس اسکیوال اجرا میشه
کافیه حتی یک میلی ثانیه سرویس اسکیوال دیرتر از برنامه شما استارت بشه تا این خطا رو ببینید.



موفق باشید

تشکر از پاسختون اما راه حل این مساله چی می تونه باشه؟

محمد آشتیانی
دوشنبه 26 مرداد 1394, 16:18 عصر
ویرایش کردم پاسخ قبلی رو دوست عزیزم

اوبالیت به بو
دوشنبه 26 مرداد 1394, 16:21 عصر
ممنون. این برنامه های مدیریت چک و سفته که تاریخ سر رسید داره اینها چطور کار می کنن؟ من میخوام کنار ساعت این هشدار رو نشون بدم وقتی برنامه اجرا میشه خیلی اجرای این خطا بد هست

محمد آشتیانی
دوشنبه 26 مرداد 1394, 16:27 عصر
ببینید خیلی سادست ، این تلاش مجدد که عرض کردم برای اتصال به دیتابیس در حد چند ثانیه هست ، در واقع موقع استارت آپ ویندوز اصلا به چشم نمیاد
اجازه بدید چند لحظه دیگه یک نمونه کد میذارم در همین پست

Mahmoud.Afrad
سه شنبه 27 مرداد 1394, 03:41 صبح
فضای نام زیر رو به رفرنسها اضافه و در کلاس program هم using رو اضافه کنید:
using System.ServiceProcess;
کد زیر رو به متد Main قبل از ایجاد فرم اضافه کنید:

const string serviceName = "MSSQL$SQLEXPRESS";

ServiceController[] services = ServiceController.GetServices(Environment.MachineN ame);
ServiceController service = services.FirstOrDefault(s => s.ServiceName == serviceName);

if (service == null)
{
MessageBox.Show(@"SqlService is not exist on this machine!");
}
else
{
if (service.Status != ServiceControllerStatus.Running)
{
try
{
TimeSpan timeout = TimeSpan.FromMilliseconds(10000);

//service.Start();
service.WaitForStatus(ServiceControllerStatus.Runn ing, timeout);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
}