PDA

View Full Version : سوال: اجرای تکه کد قبل از خاموش شدن برنامه



tara1367
سه شنبه 11 آذر 1393, 13:04 عصر
سلام اساتید گرامی
من برنامه ای نوشتم که با روشن شدن کامپیوتر اجرا میشه و تا زمانی که سیستم روشنه کابران نمی تونن برنامه رو ببندن.(توسط اجرای کد e.cancel=true در رویداد onloclosing فرم) به محض باز شدن برنامه، فیلدی از دیتابیس true میشه. حالا می خوام قبل از اینکه کامپیوتر خاموش شه این فیلد false شه. لطفا راهنمایی بفرمایید.
با سپاس

dele_ghamgin_2008
سه شنبه 11 آذر 1393, 14:07 عصر
سلام اساتید گرامی
من برنامه ای نوشتم که با روشن شدن کامپیوتر اجرا میشه و تا زمانی که سیستم روشنه کابران نمی تونن برنامه رو ببندن.(توسط اجرای کد e.cancel=true در رویداد onloclosing فرم) به محض باز شدن برنامه، فیلدی از دیتابیس true میشه. حالا می خوام قبل از اینکه کامپیوتر خاموش شه این فیلد false شه. لطفا راهنمایی بفرمایید.
با سپاس

با استفاده از تسک منیجیر میشه برنامت رو بست . تنها راه اینه که مخفی سازی کنی . اگر علنی باشه خیلی ساده میشه جلوی اجرا برنامه رو گرفت.
و اما پاسخ سوال شما ، میتونی بهش شرط بدی و توی تایم بذاری ، بهش دستوری بدی که اگه procces برنامه در حالت ShutDown بود ، برنامه بسته بشه و یا هر چیز دیگه
گ

tara1367
یک شنبه 23 آذر 1393, 10:15 صبح
تشکر اما ممکنه راهنمایی کنید چطور می تونم این شرط رو بذارم؟ کدش چیه؟
من این کد ها رو هم در رویداد onclosing فرم برنامم گذاشتم. می خوام برنامه قبل از بسته شدن متغیری در sql رو عوض کنه. اما نه تنها تکه کد sql اجرا نمی شه بلکه ویندوز خاموش نمی شه. در صورتی که به برنامه گفتم فقط در صورتی که user بخواد برنامه رو ببنده بسته نشه در غیر اینصورت قبل از خاموش شدن ویندوز کد sql اجرا بشه و برنامه بسته شه:

private void FrmMessages_FormClosing(object sender, FormClosingEventArgs e) {
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;


FrmMessages_Resize(sender, e);
}
else
{
e.Cancel = false;
try
{
SqlCommand cmmd = new SqlCommand("UPDATE TUsername SET Online='F' " +
"WHERE Username='" + sUsername + "'",
conn = new SqlConnection(codes.ReturnConnectionstring()));
conn.Open();
cmmd.ExecuteNonQuery();
conn.Close();
}
catch
{ }

Application.Exit();
Environment.Exit(0);
}
}

omid nasri
یک شنبه 23 آذر 1393, 11:55 صبح
دوست گرامی شما میتونی با عمل هوک این کار رو انجام بدی

hamid_hr
یک شنبه 23 آذر 1393, 12:32 عصر
شما احتمالا میخوای ببینی کدم سیستم حاضره کدوم غائب
ببینید قبل از اینکه سیستم خاموش بشه شما بخوای این کار روبکنی شاید سرویس های Sql server زود تر از نرم افزار شما بسته بشن و شما نتو نی به مقصودت برسی یا اگه دیتابیس شبکه باشه شاید شبکه قطع بشه و نتونی ثبت کنی
شمامیتونی یه راه دیگه انتخاب کنی مثلا اگه هر یوزر تو sql server هم یه یوزر داره میتونی لیست یوزر هایی که کانکت هستند رو در بیاری

tara1367
دوشنبه 24 آذر 1393, 08:52 صبح
دوست گرامی شما میتونی با عمل هوک این کار رو انجام بدی

تشکر میشه راهنمایی بفرمایید؟

tara1367
دوشنبه 24 آذر 1393, 08:55 صبح
شما احتمالا میخوای ببینی کدم سیستم حاضره کدوم غائب
ببینید قبل از اینکه سیستم خاموش بشه شما بخوای این کار روبکنی شاید سرویس های Sql server زود تر از نرم افزار شما بسته بشن و شما نتو نی به مقصودت برسی یا اگه دیتابیس شبکه باشه شاید شبکه قطع بشه و نتونی ثبت کنی
شمامیتونی یه راه دیگه انتخاب کنی مثلا اگه هر یوزر تو sql server هم یه یوزر داره میتونی لیست یوزر هایی که کانکت هستند رو در بیاری

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

hamid_hr
دوشنبه 24 آذر 1393, 09:05 صبح
یه راهش اینه که یه جدول درست کنی با فیلدهای datetime, username و مثلا هر یک دقیقه هر یوزر حضور بزنن
حضورشونم به این صورت که بیان تو جدول datetime رو ثبت کنن
شما یه سلکت بگیر اگه یک یوزر اختلافش بیشتر از یک دقیقه بود یعنی افلاین شده
فقط یه نکته اینکه باید Datetime سرور رو ثبت کنن چون شاید زمان کلاینت ها تنظیم نباشه

tara1367
دوشنبه 01 دی 1393, 09:40 صبح
مشکل اصلی من بغیر از تغییر فیلد دیتابیس اینه که چون برنامم در سیستم tray هست، کامپیوتر خاموش نمی شه.

tara1367
یک شنبه 14 دی 1393, 08:50 صبح
کسی نمی دونه؟؟!! من هنوز گیرم :-(

hamid_hr
یک شنبه 14 دی 1393, 08:59 صبح
خب من که میگم
کلا الگوریتمو عوض کن
اینطوری که شما میخوای کار کنی اگه برق یه سیستم قطع بشه سیستم نمیتونه فیلدشو تغییر بده و تو گزارشات این سیستم انلاین نشون داده میشه