Código vb:
Ver original
Private 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 original
Try ' 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.