Hola, quiero hacer un ejecutable que llame a un archivo .exe externo, y me ha funcionado con el comando Shell, pero si ese mismo archivo lo abre otra persona en otro PC, a él no le abre el .exe externo porque no está en su ruta..
La pregunta es cómo hacer eso pero que se abre en todos los ordenadores..
...¿Y cual es la susodicha ruta en cuestión?.
-> http://en.wikipedia.org/wiki/Environment_variable
+ -> http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx
Saludos!
Cita de: EleKtro H@cker en 8 Julio 2013, 18:44 PM
...¿Y cual es la susodicha ruta en cuestión?.
-> http://en.wikipedia.org/wiki/Environment_variable
+ -> http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx
Saludos!
C/Ejecutable.exe .. me refiero a ponerlo y que abra en todos los pc, aunque en su disco duro no esté el ejecutable.
Cita de: Adrylek en 8 Julio 2013, 18:56 PMC/Ejecutable.exe .. me refiero a ponerlo y que abra en todos los pc, aunque en su disco duro no esté el ejecutable.
Entonces tienes dos opciones:
1. Añadir ese executable a tu proyecto como un archivo de recurso, y cargar el recurso al disco cuando quieras usarlo.
2. Añadir el executable a la carpeta de trabajo de tu aplicación (.\windowsaplication\debug\bin\Executable.exe), de esta forma no necesitas especificar una ruta al llamar al executable, porque está en el directorio actual, así que es suficiente con escribir el nombre, sin la ruta.
Saludos!
Cita de: EleKtro H@cker en 8 Julio 2013, 19:06 PM
Entonces tienes dos opciones:
1. Añadir ese executable a tu proyecto como un archivo de recurso, y cargar el recurso al disco cuando quieras usarlo.
2. Añadir el executable a la carpeta de trabajo de tu aplicación (.\windowsaplication\debug\bin\Executable.exe), de esta forma no necesitas especificar una ruta al llamar al executable, porque está en el directorio actual, así que es suficiente con escribir el nombre, sin la ruta.
Saludos!
Me pone que no se encuentra..
Lo siento pero lo podrías explicar mejor? Soy bastante noob r.r
Estructura de la carpeta de tu proyecto:
.\debug\bin\MiProyectoCompilado.exe
.\debug\bin\Archivo externo.exe
Metes el proceso externo en la misma carpeta donde está tu proyecto compilado.
bien, y luego lo llamas de la siguiente manera:
Process.Start(".\Archivo externo.exe", "- Argumentos")
Así de simple.
Saludos!
Cita de: EleKtro H@cker en 8 Julio 2013, 19:54 PM
Estructura de la carpeta de tu proyecto:
.\debug\bin\MiProyectoCompilado.exe
.\debug\bin\Archivo externo.exe
Metes el proceso externo en la misma carpeta donde está tu proyecto compilado.
bien, y luego lo llamas de la siguiente manera:
Process.Start(".\Archivo externo.exe", "- Argumentos")
Así de simple.
Saludos!
Gracias ya me funciona, esto se abrirá en todos los pc?
Cita de: Adrylek en 8 Julio 2013, 19:59 PMGracias ya me funciona, esto se abrirá en todos los pc?
Si, no te preocupes, en
todos, sin excepción alguna (siempre que el exe esté en la misma carpeta que el compilado como en el ejemplo anterior, o en la carpeta SYSTEM32/64).
Saludos
Cita de: EleKtro H@cker en 8 Julio 2013, 20:06 PM
Si, no te preocupes, en todos, sin excepción alguna (siempre que el exe esté en la misma carpeta que el compilado como en el ejemplo anterior, o en la carpeta SYSTEM32/64).
Saludos
s:, me funcionaba, pero si cambio la ruta del archivo que he creado, de /bin al escritorio, ya no me funciona y me dice otra vez que no encuentra el archivo, siempre ha de estar en la misma carpeta y yo sólo quiero un archivo que pueda usar en diferentes pc
Ambos archivos deben estar en la misma ruta, si moviste tu aplicación al escritorio también el ejecutable que quieres llamar debe estar en el escritorio.
Cita de: Adrylek en 8 Julio 2013, 20:10 PMyo sólo quiero un archivo que pueda usar en diferentes pc
Pues escoge la primera opción, el archivo externo.exe lo metes en tu proyecto como un recurso, y luego lo cargas al disco (a la carpeta que quieras, la carpeta %TEMP% estaría bien) y lo ejecutas.
El archivo lo puedes añadir como recurso desde las propiedades del proyecto, la pestaña "resources", no tiene pérdida (busca en Google si aún asi no te aclaras.), y para cargar el recurso a una carpeta puedes usar uno d emis snippets:
http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1819773#msg1819773
Saludos
Cita de: EleKtro H@cker en 8 Julio 2013, 21:58 PM
Pues escoge la primera opción, el archivo externo.exe lo metes en tu proyecto como un recurso, y luego lo cargas al disco (a la carpeta que quieras, la carpeta %TEMP% estaría bien) y lo ejecutas.
El archivo lo puedes añadir como recurso desde las propiedades del proyecto, la pestaña "resources", no tiene pérdida (busca en Google si aún asi no te aclaras.), y para cargar el recurso a una carpeta puedes usar uno d emis snippets:
http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1819773#msg1819773
Saludos
:l.. Me aparece el .exe en la carpeta Resources y de ahí ya no me deja moverlo, y no sé cómo llamarlo desde ahí..
@Adrylek
Se te ha dado todo lo que necesitas ...de todas formas no entiendo porque quieres mover el archivo de la carpeta Resources... al compilar tu proyecto ese archivo externo queda DENTRO del archivo compilado... ¿No querías un archivo "único" que se pueda mover a donde quieras?
...Da detalles de tu problema porque esto empieza a ser incómodo, no somos adivinos.
1. ¿que archivo externo es ese?, nombre de aplicacion si es conocido.
2. ¿Que se supone que hace tu aplicación con ese archivo?, ¿tu aplicación depende de ese archivo externo?
3. ¿que significa que no funciona en otro pc?
4. en que carpeta se encuentra ese archivo externo en tu pc
5. en que carpeta se puede encontrar ese otro archivo en otra pc
6. ¿no te sirve con embedir el archivo como recurso, cargarlo al disco, y problema solucionado?
7. ¿Tampoco te sirve mantener el archivo externo EN LA MISMA CARPETA que al archivo compilado?
8. ¿Tampoco te sirve mover el archivo externo a la carpeta system32?.
9. Cualquiera de las tres últimas opciones te sirve, ¿Hay alguna que no entiendas como hacerlo?.
10. da un ejemplo bien claro de todo con imágenes si lo ves necesario.
Saludos.
Cita de: EleKtro H@cker en 9 Julio 2013, 18:24 PM
@Adrylek
Se te ha dado todo lo que necesitas ...de todas formas no entiendo porque quieres mover el archivo de la carpeta Resources... al compilar tu proyecto ese archivo externo queda DENTRO del archivo compilado... ¿No querías un archivo "único" que se pueda mover a donde quieras?
...Da detalles de tu problema porque esto empieza a ser incómodo, no somos adivinos.
1. ¿que archivo externo es ese?, nombre de aplicacion si es conocido.
2. ¿Que se supone que hace tu aplicación con ese archivo?, ¿tu aplicación depende de ese archivo externo?
3. ¿que significa que no funciona en otro pc?
4. en que carpeta se encuentra ese archivo externo en tu pc
5. en que carpeta se puede encontrar ese otro archivo en otra pc
6. ¿no te sirve con embedir el archivo como recurso, cargarlo al disco, y problema solucionado?
7. ¿Tampoco te sirve mantener el archivo externo EN LA MISMA CARPETA que al archivo compilado?
8. ¿Tampoco te sirve mover el archivo externo a la carpeta system32?.
9. Cualquiera de las tres últimas opciones te sirve, ¿Hay alguna que no entiendas como hacerlo?.
10. da un ejemplo bien claro de todo con imágenes si lo ves necesario.
Saludos.
6- Sí que me serviría, pero no lo entiendo bien.. si lo cargo como recurso me dice que ese tipo de archivo no lo admite (.exe) pero me aparece en la carpeta Recursos, es lo que decía.
Sólo quiero saber como cargarlo al disco como dices tú..
Cita de: Adrylek en 9 Julio 2013, 18:50 PMsi lo cargo como recurso me dice que ese tipo de archivo no lo admite (.exe)
copia el mensaje de excepción completo, hay un botón que pone "copiar mensaje".
Cita de: Adrylek en 9 Julio 2013, 18:50 PMSólo quiero saber como cargarlo al disco como dices tú..
Load_Resource_To_Disk(My.Resources.ArchivoExterno, "C:\Process.exe")
Process.Start("C:\Process.exe")
Private Function Load_Resource_To_Disk(ByVal Resource As Byte(), ByVal Target_File As String) As Boolean
Try
Dim Buffer_FileStream As New IO.FileStream(Target_File, IO.FileMode.Create, IO.FileAccess.Write)
Buffer_FileStream.Write(Resource, 0, Resource.Length) : Buffer_FileStream.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
Cita de: EleKtro H@cker en 9 Julio 2013, 18:59 PM
copia el mensaje de excepción completo, hay un botón que pone "copiar mensaje".
Load_Resource_To_Disk(My.Resources.ArchivoExterno, "C:\Process.exe")
Process.Start("C:\Process.exe")
Private Function Load_Resource_To_Disk(ByVal Resource As Byte(), ByVal Target_File As String) As Boolean
Try
Dim Buffer_FileStream As New IO.FileStream(Target_File, IO.FileMode.Create, IO.FileAccess.Write)
Buffer_FileStream.Write(Resource, 0, Resource.Length) : Buffer_FileStream.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
En fin..
Siento molestar tanto pero me da tres errores..
Error 1 'ArchivoExterno' es un tipo en 'Resources' y no se puede usar como expresión.
Error 2 La instrucción no puede aparecer dentro de un cuerpo de método. Se supone el final del método.
Sé que soy muy noob en esto pero lo necesito hacer..
No me has copiado la excepción, sólo el mensaje del error.
Cita de: Adrylek en 9 Julio 2013, 19:07 PMError 2 La instrucción no puede aparecer dentro de un cuerpo de método. Se supone el final del método
Supongo que eso te está pasando porque has copiado mi código sin hacer los cambios necesarios...
1. las instrucciones las metes dentro de un procedimiento, esto:
Load_Resource_To_Disk(My.Resources.ArchivoExterno, "C:\Process.exe")
Process.Start("C:\Process.exe")
2. "My.Resources.ArchivoExterno", "ArchivoExterno" lo tienes que modificar por el nombre de tu recurso...
Y así ya te funcionará.
Saludos
Cita de: EleKtro H@cker en 9 Julio 2013, 19:41 PM
No me has copiado la excepción, sólo el mensaje del error.
Supongo que eso te está pasando porque has copiado mi código sin hacer los cambios necesarios...
1. las instrucciones las metes dentro de un procedimiento, esto:
Load_Resource_To_Disk(My.Resources.ArchivoExterno, "C:\Process.exe")
Process.Start("C:\Process.exe")
2. "My.Resources.ArchivoExterno", "ArchivoExterno" lo tienes que modificar por el nombre de tu recurso...
Y así ya te funcionará.
Saludos
Eso ya lo hacía..
Me dice
Error 1 'Load_Resource_To_Disk' no está declarado. Puede que esté inaccesible debido a su nivel de protección.
Error 2 'stryk' no es un miembro de 'resources'.
stryk es el .exe que quiero poner..
No sé si pongo bien el .exe como recurso ya que al añadirlo como recurso sólo le he dado en añadir recurso y he buscado el .exe .. t.T
Cita de: Adrylek en 9 Julio 2013, 19:54 PMError 1 'Load_Resource_To_Disk' no está declarado. Puede que esté inaccesible debido a su nivel de protección.
Estás intentando usar la función desde otro formulario, como te dice el error tienes que modificar el tipo de protección.
Public shared Function Load_Resource_To_Disk(ByVal bla bla bla...
end function
Cita de: Adrylek en 9 Julio 2013, 19:54 PMError 2 'stryk' no es un miembro de 'resources'.
No has agregado corréctamente el recurso al namespace "my.resources", arriba te expliqué como debes añadirlo.
Saludos!
Cita de: EleKtro H@cker en 9 Julio 2013, 20:46 PM
Estás intentando usar la función desde otro formulario, como te dice el error tienes que modificar el tipo de protección.
Public shared Function Load_Resource_To_Disk(ByVal bla bla bla...
end function
No has agregado corréctamente el recurso al namespace "my.resources", arriba te expliqué como debes añadirlo.
Saludos!
Lo añado como tú dices, se me pone en la carpeta Resources y nada más..