PDA

View Full Version : حرفه ای: تشخیص نحوه ی اجرا شدن برنامه (توسط کاربر یا از طریق Startup)



morteza271
سه شنبه 22 شهریور 1390, 09:02 صبح
سلام.

من توی برنامم یه فرم دارم که در ابتدای اجرای برنامه یه چیزهایی چک میشه و اطلاعاتی رو نشون میده.
حالا میخوام یه کاری کنم که وقتی سیستم روشن میشه بدون اینکه کاربر برنامه رو اجرا کنه این فرم نمایش داده بشه.
ولی نمیدونم دقیقا باید چیکارکنم.
یه راهش اینه که میتونم کل برنامه رو به Startup سیستم اضافه کنم تا در ابتدای روشن شدن سیستم برنامه اجرا بشه و این فرم رو نمایش بده.
ولی میخوام اگه بشه کاری کنم که کاربر متوجه این نشه که برنامه اجرا شده! میخوام اگه امکانش باشه کاری کنم که در ابتدای روشن شدن سیستم فقط این فرم نمایش داده بشه و برنامه اجرا نشه یا اگه اجرا میشه کاربر متوجه نشه.

میخواستم ببینم که چطوری میتونم تشخیص بدم که برنامه از Startup اجرا شده و یا اینکه کاربر روی exe دابل کلیک کرده و برنامه رو اجرا کرده؟؟اصلا امکانش هست یه همچین کاری؟

یه سوال دیگه هم دارم :
من قراره برای این برنامه ستاپ بسازم و بدم به مشتری چطوری میتونم کاری کنم که برنامه به Stratup سیستم اضافه بشه؟
این کار رو باید توی ستاپ تنظیم کنم یا اینکه توی سی شارپ میشه؟؟

ممنون میشم دوستان سریعتر راهنمایی کنن.
با تشکر فراوان...

water_lily_2012
سه شنبه 22 شهریور 1390, 09:42 صبح
چی رو چک می کنه. آیا با برنامه اصلی در ارتباط هست. می توانید یک برنامه جدا طراحی کنید.
و برای اجرا هم چند راه دارید.
یکی StartUp
یکی استفاده از رجیستری
یکی اینکه یک سرویس طراحی کنید که با شروع ویندوز، مانند سرویس های خود ویندوز اجرا بشه.

unknown.unforgiven
سه شنبه 22 شهریور 1390, 09:46 صبح
سلام
برای گذاشتن برنامه توی startup میتونی از رجیستری استفاده بکنی. من با VS تا به حال setup درست نکردم ولی با اونایی که کار کردم، با رجیستری باید این کار رو انجام میدادم.
راه حلی که برای فهمیدن اینکه برنامت از طریق startup اجرا شده یا نه، به ذهنم میرسه، استفاده از مدت زمانی که سیستم بالاست

morteza271
سه شنبه 22 شهریور 1390, 10:49 صبح
چی رو چک می کنه. آیا با برنامه اصلی در ارتباط هست
آره با برنامه اصلی در ارتباط هست و بعضی وقتها که چیزی برای نمایش نیست فرم باز نمیشه!

من با InstallSheild ستاپ ها رو میسازم باید چه رجیستری ثبت کنم که برنامه به Startup سیستم اضافه بشه؟؟


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

water_lily_2012
سه شنبه 22 شهریور 1390, 10:57 صبح
در خود برنامه می توانی با اولین اجرا برنامه خودت را در رجیستری ثبت کنی. فقط باید کار با رجیستری را بلد باشی که اون هم داخل اینترنت زیاد مطلب داره.

morteza271
سه شنبه 22 شهریور 1390, 11:20 صبح
ممنونم دوست عزیز.
کسی کد آماده برای این کار نداره که تست شده باشه و درست جواب بده (روی همه سیستم ها).
اصلا وقت ندارم با تشکر...

water_lily_2012
سه شنبه 22 شهریور 1390, 11:58 صبح
این کد می تونه کمکت کنه.

private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long;
private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long;
private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long;
private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long;
private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long;
private Const HKEY_LOCAL_MACHINE = &H80000002;
private Const REG_SZ = 1;


private void SaveString(string strPath,string strValue,string strdata)
{
long keyhand;
long r;
r = RegCreateKey(HKEY_LOCAL_MACHINE, strPath, keyhand);
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata));
r = RegCloseKey(keyhand);
}

unknown.unforgiven
سه شنبه 22 شهریور 1390, 13:47 عصر
من از این کد برای اضافه کردن برنامم به startup استفاده میکنم. برای استفاده ازش میتونی تو form_load برنامت بذاریش. اول چک میکنه ببینه قبلاً ثبت شده یا نه، اگر ثبت شده بود که هیچ ولی اگر نه، ثبتش میکنه.
object key = Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\ CurrentVersion\\Run\\", Application.ProductName, null);
if (key == null)
{
RegistryKey mm = Registry.LocalMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\ \");
mm.SetValue(Application.ProductName, Application.ExecutablePath);
mm.Close();
}

برای بدست آوردن up time سیستم میتونی از این کد استفاده بکنی
int upTime = System.Environment.TickCount; //up time in milliseconds
چیزی که باید بهش توجه کنی اینه که این دستور وقتی سیستم رو restart میکنی کانترش رو ریست میکنه

majafer2
چهارشنبه 18 دی 1392, 20:04 عصر
یه سوال داشتم
چه فایل کتابخانه ای رو باید اضافه کنم تا دیباگر ویژوال استادیو کلمه ی Registry رو بشناسه؟

omid nasri
چهارشنبه 18 دی 1392, 21:09 عصر
using Microsoft.win32;