Le implementé una función para se ejecute al iniciar sesión en Windows, en un principio parecía que no funcionaba aunque yo podía ver perfectamente en el registro de Windows que mi programa estaba en la lista.
Código vb:
Ver originalPrivate Function start_Up(ByVal bCreate As Boolean) As String
Const key As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Dim subClave As String = Application.ProductName.ToString
Dim msg As String = ""
Try
Dim Registro As RegistryKey = CurrentUser.CreateSubKey(key, RegistryKeyPermissionCheck.ReadWriteSubTree)
With Registro
.OpenSubKey(key, True)
Select Case bCreate
Case True
.SetValue(subClave, _
Application.ExecutablePath.ToString)
Case False
If .GetValue(subClave, "").ToString <> "" Then
.DeleteValue(subClave)
End If
End Select
End With
Catch ex As Exception
msg = ex.Message.ToString
End Try
Return Nothing
End Function
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked = True Then
' Código para añadir a inicio
start_Up(True)
My.Settings.RunAtStart = True
My.Settings.Save()
Else
' Código para quitar de inicio
start_Up(False)
My.Settings.RunAtStart = False
My.Settings.Save()
End If
End Sub
Probé a hacer un proyecto nuevo con un formulario vacío y éste sí se iniciaba correctamente. Luego se me ocurrió añadirle a mi programa un "NotifyIcon" para ver si al menos llegaba a mostrarse el icono del programa en el área de notificaciones de la barra de tareas, y sí, se mostraba el icono durante unos segundos y luego desaparecía.
Entonces lo que veo que pasa, es que Windows comienza a abrir la aplicación, y por alguna razón decide no seguir y cerrarla. Pero esto sólo ocurre en el inicio automático, abrirla manualmente no da ningún problema.
¿Alguien que al menos me pueda confirmar el poco sentido que tiene esto?
Dejo aquí la dirección al proyecto en Github por si a alguien le interesa probarlo por sí mismo: https://github.com/vistaero/TARDIS
EDITO: Acabo de hacer la prueba borrando todo el código en Form1 Load, ahora la aplicación sí termina de abrirse cuando se inicia con Windows, así que el problema está localizado ahí.
EDITO 2: Por alguna razón, un programa iniciando automáticamente por Windows se comporta de forma ligeramente distinta que iniciado manualmente. Metí todo el código sospechoso dentro de un:
Código vb:
Ver originalTry
' Aquí todo el código en el que se debía encontrar el problema
Catch ex As Exception
MsgBox(ex.Message)
End Try
La siguiente vez que cerré y abrí sesión, me salió un mensaje de error describiendo el fallo, gracias al cual pude corregirlo y ya el programa se inicia con Windows sin el menor problema.