Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Psyke1 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
-
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..
-
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.
-
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:
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:
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 ;-)
(http://oi45.tinypic.com/34sle06.jpg)
PRUEBA DOS:
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!
Error 70: Permiso denegado
¿Qué pasa aquí? :o
DoEvents! :P
-
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.
-
No me lo puedo creer: ¡FUNCIONA!
Lo arreglé así:
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