2012-01-07 13 views
10

Mi programa establece su visualización en función de si el programa se está ejecutando por primera vez o no. Con el fin de determinar si el programa se está ejecutando por primera vez, actualmente estoy usando un¿Cómo puedo verificar si un programa se está ejecutando por primera vez?

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

Cuando se ejecuta el programa que llama a un método que comprueba el estado de ese valor bool y actúa en consecuencia:

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"; } 

Parece que funciona bastante bien, sin embargo, si el archivo .exe se mueve y se inicia desde una nueva ubicación, lo considera una primera ejecución, y me preocupa que lo esté haciendo de manera desordenada y tal vez exista una manera más eficiente para probar los programas que se ejecutan por primera vez. ¿Hay una mejor manera de hacer esto?

+0

Pruebe esto: http://stackoverflow.com/questions/622108/check-condition-if-the-appliation-is-running-for-the-first-time- after -being-inst –

+0

Puede obtener un mejor respuesta si entra en más detalles sobre por qué necesita saber. Por ejemplo, si necesita hacerle algunas preguntas al usuario en la primera ejecución y almacena esas respuestas, la pregunta se reducirá a dónde almacenar esas respuestas. Además, "primera vez" es ambiguo: ¿es la primera vez que usa este usuario? ¿Primera vez en esta máquina? Cuantos más detalles proporciones, mejor será la respuesta que obtienes. –

+0

¿Por qué esperas que un usuario mueva tu aplicación? – svick

Respuesta

8

Parece que el problema es en realidad que si se muda a otro lugar executable/carpeta en el mismo PC, pierde de alguna manera la información sobre el hecho de que ya se ha ejecutado al menos una vez.

Usando UserSettings, en Properties.Settings.Default.FirstRun debería resolver su problema.

Algo como esto, un pseudocódigo:

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"; } 

Look en this muestra cómo lograr que de una manera más detallada.

+0

Así es como es realmente mi código. Me disculpo, olvidé escribirlo de esa manera. Me alegro de que esté recomendando la forma en que lo uso. –

6

Dado que su pregunta parece estar preocupada por cada usuario que lanza la aplicación, entonces debe diseñar una solución por usuario.

Uso de propiedades. Las configuraciones realmente funcionarán y serán eficientes siempre que la configuración en cuestión sea específica del usuario.

Sin embargo, si esto no es deseado o apropiado para su aplicación, también puede escribir una entrada específica para el usuario en el registro.

Por ejemplo:

 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"; 
     } 
+0

¿Se restablecerá la clave de registro a NULL o algo similar cuando desinstala la aplicación? – Ashwin

+0

@NeoWin: No, necesitaría agregar una ... clase de instalador de Net para realizar este trabajo o implementarlo en el instalador de su elección. –

2

difícil de adivinar lo que es complicado si no publique o describe. Un enfoque obvio es tener una configuración llamada "ExePath". Si obtiene un valor nulo o una cadena que no coincide con Assembly.GetEntryAssembly(). Location, entonces se acaba de instalar o mover.

Cuestiones relacionadas