簡體   English   中英

如何檢查程序是否第一次運行?

[英]How can I check if a program is running for the first time?

我的程序根據程序是否第一次運行來設置其顯示。 為了確定程序是否第一次運行我當前正在使用a

//this boolean exists within my programs settings
Setting boolean FirstRun = True;

當程序運行時,它調用一個方法來檢查該bool值的狀態並相應地采取行動:

if(Properties.Settings.FirstRun == true)
{ lblGreetings.Text = "Welcome New User";
  //Change the value since the program has run once now
  Properties.Settings.FirstRun = false;
  Properties.Settings.Save(); }
else
{ lblGreetings.Text = "Welcome Back User"; }

它似乎工作得非常有效,但是如果.exe文件被移動並從一個新位置啟動它認為它是第一次運行,我擔心我是以一種混亂的方式這樣做,也許存在更高效測試首次運行的程序的方式。 有一個更好的方法嗎?

似乎你的問題實際上是,如果你將executable移動到同一台 PC上的另一個位置/文件夾,它會以某種方式丟失有關它已經運行至少一次這一事實的信息。

使用UserSettings ,在Properties.Settings.Default.FirstRun可以解決您的問題。

像這樣的東西, 偽代碼

if(Properties.Settings.Default.FirstRun == true)
{ lblGreetings.Text = "Welcome New User";
  //Change the value since the program has run once now
  Properties.Settings.Default.FirstRun = false;
  Properties.Settings.Default.Save(); }
else
{ lblGreetings.Text = "Welcome Back User"; }

看看這個示例如何以更詳細的方式實現它。

由於您的問題似乎與啟動應用程序的每個用戶有關,因此您應該設計每用戶解決方案。

使用Properties.Settings實際上可以正常工作並且只要有問題的設置是特定於用戶的。

但是,如果不希望或不適合您的應用程序,您還可以將特定於用戶的條目寫入注冊表。

例如:

        const string REGISTRY_KEY = @"HKEY_CURRENT_USER\MyApplication";
        const string REGISTY_VALUE = "FirstRun";
        if (Convert.ToInt32(Microsoft.Win32.Registry.GetValue(REGISTRY_KEY, REGISTY_VALUE, 0)) == 0)
        {
            lblGreetings.Text = "Welcome New User";
            //Change the value since the program has run once now
            Microsoft.Win32.Registry.SetValue(REGISTRY_KEY, REGISTY_VALUE, 1, Microsoft.Win32.RegistryValueKind.DWord);
        }
        else
        {
            lblGreetings.Text = "Welcome Back User";
        }

如果你不發布或描述它,很難猜出什么是凌亂。 一種顯而易見的方法是使用名為“ExePath”的設置。 如果你得到null或一個與Assembly.GetEntryAssembly()。Location不匹配的字符串,那么它剛剛安裝或移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM