برای اینکه مشکل خاموش شدن کامپیوتر رو بشه بر طرف کرد. میشه کاری کرد که وقتی دستور خاموش شدن داده شد به برنامه دستور End داد
تا برنامه بسته بشه . فکر کنم بهترین راه حل در حال حاضر همین باشه . آیا چنین راهی بلد هستید که هم توی ویندوز اکسپی و هم 7 جواب
بده .
به نظر شما چه جوری میتونم به این مشکل پی ببرم؟
بله ميشه!

وقتي برنامه داره بسته ميشه رويداد FormClosing رخ ميده. سما بايد تو اين رويداد مربوط به Start Up فرمتون دستور End يا Application.Exit() و يا Application.ExitThread() رو وارد كنيد.

يه راه ديگه اينه كه مستقيم رويداد Shutting Down سيستم عامل رو كنترل كنيد. براي اين كار ابتدا مجموعه زير رو وارد كنيد:
کد:
Imports Microsoft.Win32
بعد فرمان زير رو در Public Class فرم اصلي تون قرار بديد:
کد:
Public Shared Sub OnShuttingdown(ByVal sender As Object, ByVal e As SessionEndingEventArgs) End End Sub
در آخر كد زير رو هرجايي كه اجرا كنيد رويداد مورد نظر تشكيل ميشه. مي تونيد تو رويداد Form_Load بذاريد:
کد:
AddHandler SystemEvents.SessionEnding, AddressOf OnShuttingdown
سورس بالا روي تمام نسخه ويندوز جواب گو هست.

براي پي بردن به مشكل بهتره اول منابع سيستم رو هرجا كه نياز نداريد Dispose كنيد. قدم بعدي اينه كه با دستور:
shutown -f -s
كه فرمان Shutdown با پارامتر Force هست سعي كنيد رايانه رو خاموش كنيد. بررسي كنيد كه اين جوري برنامه بسته ميشه. اگه برنامه بسته شد نشون دهنده ي اينه كه برنامه يه جورايي جواب FALSE رو در هنگام خاموش شدن ارسال مي كرد.

اين رو اضافه كنم كه به دلايلي ممكنه اصلا" رويداد ها رخ ندند مثلا" برنامه اي وابسته اي فرآيند shutdown رو كنسل كنه در اون صورت شما بايد اسمبلي و thread هاي كه به برنامه شما ربط دارند رو بررسي كنيد و موارد مشكوك رو ببنديد.

موفق باشيد
آرمين