Autor Tema: No consigo que mi app se ejecute al inicio.  (Leído 4270 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
No consigo que mi app se ejecute al inicio.
« en: Diciembre 04, 2012, 06:24:21 am »
Tengo Windows 7.

Copio mi exe en la carpeta de inicio, reinicio, pero no se ejecuta.
También he probado a añadir una clave en el registro y nada...
Puede ser porque mi exe requiere permisos de administrador pues si creo un programa que tan sólo te muestre un MsgBox funciona con cualquiera de los métodos anteriores... :P

¿Alguna solución? ???

DoEvents! :P

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:No consigo que mi app se ejecute al inicio.
« Respuesta #1 en: Diciembre 04, 2012, 08:10:53 am »
Hola, es raro lo que planteas por que si se ejecuta la otra que haces de prueba me da por pensar que esta teniendo algun problema la aplicacion misma y no es que no se ejecuta sino que no la ves o ce cierra por algun error. Intenta colocarle algunos mensajes en el procedimiento load para verificar que realmente no se ejecuta. y chequear el codigo. Ojo  con app.path en Win 7 que si intentas escribir en un archivo por ejemplo algo y no tiene permisos la carpeta donde esta contenido ese archivo te dará error..
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:No consigo que mi app se ejecute al inicio.
« Respuesta #2 en: Diciembre 04, 2012, 01:15:11 pm »
Me acuerdo que en windows vista si pones un programa al inicio que requiriera permisos de aministrador el sistema lo bloqueaba y daba un mensage de advertencia, la verdad no se como lo maneja Seven y no tengo aca para testearlo pero fijate de no requerir permisos de administrador a ver que pasa.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:No consigo que mi app se ejecute al inicio.
« Respuesta #3 en: Diciembre 04, 2012, 02:18:45 pm »
Me acuerdo que en windows vista si pones un programa al inicio que requiriera permisos de aministrador el sistema lo bloqueaba y daba un mensage de advertencia, la verdad no se como lo maneja Seven y no tengo aca para testearlo pero fijate de no requerir permisos de administrador a ver que pasa.
Si los requiere no se ejecuta (ni siquiera una advertencia). Si no los requiere se ejecuta correctamente. :-\



Mirad, hice unas pruebas con esta función:

Código: (vb) [Seleccionar]
Option Explicit

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, 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 Const HKEY_CURRENT_USER     As Long = &H80000001
Private Const KEY_WRITE             As Long = &H20006
Private Const REG_SZ                As Long = &H1

Public Function PutOnStartUp(ByVal sPath As String) As Boolean
Dim hRegkey                         As Long

    If RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_WRITE, hRegkey) = 0 Then
        sPath = sPath & vbNullChar
        PutOnStartUp = RegSetValueEx(hRegkey, "My App", 0, REG_SZ, ByVal sPath, Len(sPath)) = 0
        RegCloseKey hRegkey
    End If
End Function



PRUEBA UNO:

Código: (vb,6) [Seleccionar]
Private Sub Form_Load()
Dim sPath      As String

    sPath = App.Path & "\" & App.EXEName & ".exe"
   
    If PutOnStartUp(sPath) Then
        Me.BackColor = vbGreen
    Else
        Me.BackColor = vbRed
    End If
   
    Me.AutoRedraw = True
    Me.Print sPath
End Sub

  • Compilo en el escritorio.
  • Lo ejecuto.
  • Reinicio y efectivamente, se ha ejecutado correctamente desde mi escritorio ;-)





PRUEBA DOS:

Código: (vb,10) [Seleccionar]
Private Sub Form_Load()
Dim sPath      As String
Dim sDest      As String

    sPath = App.Path & "\" & App.EXEName & ".exe"
    sDest = Environ("tmp") & "\Test.exe"
   
    FileCopy sPath, sDest
   
    If PutOnStartUp(sDest) Then
        Me.BackColor = vbGreen
    Else
        Me.BackColor = vbRed
    End If
   
    Me.AutoRedraw = True
    Me.Print sPath
End Sub

  • Compilo en el escritorio.
  • Lo ejecuto.
  • Compruebo que se ha copiado en la carpeta temporal
  • Borro el del escritorio por si las moscas.
  • Reinicio y... ¡CRASH!

Citar
Error 70: Permiso denegado

¿Qué pasa aquí? :o

DoEvents! :P

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:No consigo que mi app se ejecute al inicio.
« Respuesta #4 en: Diciembre 04, 2012, 05:49:26 pm »
Hola, mira yo entiendo en ese codigo que la segunda vez que se ejecuta, queres autoescrivir la aplicacion en ejecución, deverias hacer una comprovación de donde se encuentra el ejecutable, es decir si se ejecuta en una carpeta que no sea Environ("APPDATA") , lo copias en Environ("APPDATA") y lo pones en el registro, de lo contrario si estan en Environ("APPDATA"), saltas todos estos paso.

vi en el hacker.net que pusiste appdata en vez de temp, y si tengo entendido que es mejor.

Saludos.

PD: cuando escribas en el registro el path, ponelo entre comillas porque si el path donde esta el ejecutable tiene espacios no va a andar, o bien usa shortpath.

« última modificación: Diciembre 04, 2012, 05:52:43 pm por LeandroA »

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
Re:No consigo que mi app se ejecute al inicio.
« Respuesta #5 en: Diciembre 04, 2012, 06:00:44 pm »
No me lo puedo creer: ¡FUNCIONA!

Lo arreglé así:
Código: (VB,27) [Seleccionar]
Option Explicit
 
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, 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 Const HKEY_CURRENT_USER     As Long = &H80000001
Private Const KEY_WRITE             As Long = &H20006
Private Const REG_SZ                As Long = &H1
 
Public Function PutOnStartUp(ByVal sPath As String) As Boolean
Dim hRegkey                         As Long
 
    If RegOpenKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_WRITE, hRegkey) = 0 Then
        PutOnStartUp = RegSetValueEx(hRegkey, "HolaLeandro", 0, REG_SZ, ByVal sPath, Len(sPath)) = 0
        RegCloseKey hRegkey
    End If
End Function

Private Sub Form_Load()
Dim sPath      As String
Dim sDest      As String
 
    sPath = App.Path & "\" & App.EXEName & ".exe"
    sDest = Environ("APPDATA") & "\Test.exe"
   
    If sDest <> sPath Then
       FileCopy sPath, sDest
   
       If PutOnStartUp(sDest) Then
           Me.BackColor = vbGreen
       Else
           Me.BackColor = vbRed
       End If
    End If
   
    Me.AutoRedraw = True
    Me.Print sPath
    Me.Print sDest
End Sub

Tiene lógica, el error viene de intentar sobrescribir la entrada del registro.
Gracias una vez más. ¡Tienes solución para todo Gallo! ::)

DoEvents! :P