elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  set APPDATA en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: set APPDATA en C#  (Leído 3,348 veces)
kaiserdj

Desconectado Desconectado

Mensajes: 12


Ver Perfil
set APPDATA en C#
« en: 6 Febrero 2018, 12:19 pm »

Buenos días,
Me gustaria pasar un launcher bat a un launcher en c# con Visual Studio, el problema es que el el launcher bat es asi:
Código:
set APPDATA=%CD%\data
bin\game.jar

¿Como seria eso en una función para que al dar a un botón se abra el jar con el custom appdata?
Muchas gracias y un saludo


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: set APPDATA en C#
« Respuesta #1 en: 6 Febrero 2018, 16:52 pm »

Hola.

1. ¿Qué se supone que tiene que ver tu duda con el lenguaje Visual Basic?. Las preguntas sobre C# van en el subforo de Programación .NET Framework

2. El concepto de declarar una función consiste en el propósito de devolver un valor específico al finalizar el bloque de instrucciones de dicha función, por ende, una función no parece ser aplicable ni necesaria en tu caso, ya que tan solo parece que necesitas usar un método-controlador del evento Click de un botón, e iniciar un tipo de archivo executable.

3. En el código Batch-script que has mostrado, estás declarando una variable que tiene el mismo nombre que una de las variables de entorno: %APPDATA%, y por ende, estás sustituyendo el valor de la variable de entorno %APPDATA% durante el tiempo de vida de la instancia de la CMD donde corra tu script. Hacer ese tipo de cosas va contra las guías de diseño de la programación Batch.

4. De por si, esas dos lineas de código Batch que has mostrado no tienen relación ni sentido entre si, puesto que declaras la variable APPDATA y no la utilizas para nada, así que no sabemos cual es tu propósito al hacer eso.

De todas formas, te muestro dos ejemplos:

Equivalente en C# a declarar una variable y asignarle como valor el directorio de trabajo actual:
Código
  1. using System.IO;
  2. (...)
  3.  
  4. // set APPDATA=%CD%\data
  5. string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");

Equivalente en C# a iniciar un tipo de archivo executable a través de Shell-Execute:
Código
  1. using System.Diagnostics;
  2. using System.IO;
  3. (...)
  4.  
  5. // bin\game.jar
  6. using (Process p = new Process()) {
  7.    p.StartInfo.FileName = @".\bin\game.jar";
  8.    p.StartInfo.UseShellExecute = true;
  9.    p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);
  10.  
  11.    p.Start();
  12. }

Como puedes ver en el ejemplo de arriba, para iniciar un tipo de archivo executable puedes usar la clase System.Diagostics.Process. Si en lugar de la consola de java tu intención es ejecutar directamente ese archivo .jar, entonces no te olvides de activar la propiedad Process.StartInfo.UseShellExecute.

Saludos!


« Última modificación: 6 Febrero 2018, 21:52 pm por Eleкtro » En línea

kaiserdj

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: set APPDATA en C#
« Respuesta #2 en: 6 Febrero 2018, 21:09 pm »

Hola.

1. ¿Qué se supone que tiene que ver tu duda con el lenguaje Visual Basic?. Las preguntas sobre C# van en el subforo de Programación .NET Framework

2. El concepto de declarar una función consiste en el propósito de devolver un valor específico al finalizar el bloque de instrucciones de dicha función, por ende, una función no parece ser aplicable ni necesaria en tu caso, ya que tan solo parece que necesitas usar un método-controlador del evento Click de un botón, e iniciar un tipo de archivo executable.

3. En el código Batch-script que has mostrado, estás declarando una variable que tiene el mismo nombre que una de las variables de entorno: %APPDATA%, y por ende, estás sustituyendo el valor de la variable de entorno %APPDATA% durante el tiempo de vida de la instancia de la CMD donde corra tu script. Hacer ese tipo de cosas va contra las guías de diseño de la programación Batch.

4. De por si, esas dos lineas de código Batch que has mostrado no tienen relación ni sentido entre si, puesto que declaras la variable APPDATA y no la utilizas para nada, así que no sabemos cual es tu propósito al hacer eso.

De todas formas, te muestro dos ejemplos:

Equivalente en C# a declarar una variable y asignarle como valor el directorio de trabajo actual:
Código
  1. using System.IO;
  2. (...)
  3.  
  4. // set APPDATA=%CD%\data
  5. string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");

Equivalente en C# a iniciar un tipo de archivo executable a través de Shell-Execute:
Código
  1. using System.Diagnostics;
  2. using System.IO;
  3. (...)
  4.  
  5. // bin\game.jar
  6. using (Process p = new Process()) {
  7.    p.StartInfo.FileName = @".\bin\game.jar";
  8.    p.StartInfo.UseShellExecute = true;
  9.    p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);
  10.  
  11.    p.Start();
  12. }

Como puedes ver en el ejemplo de arriba, para iniciar un tipo de archivo executable puedes usar la clase System.Diagostics.Process. Si en lugar de la consola de java tu intención es ejecutar directamente ese archivo .jar, entonces no te olvides de activar la propiedad Process.StartInfo.UseShellExecute.

Saludos!
Muchas gracias por contestar lo primero,
set APPDATA=%CD%\data
me sirve en el bat para que al ejecutar el .jar tome la carpeta "data" como la carpeta appdata, en vez de la propia carpeta %APPDATA% que viene por defecto en windows

He probado el código que me diste, el problema es que no coge como PATH de APPDATA la carpeta "data" si no la carpeta "AppData" por defecto de windows

Un saludo
« Última modificación: 6 Febrero 2018, 21:53 pm por Eleкtro » En línea

kaiserdj

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: set APPDATA en C#
« Respuesta #3 en: 6 Febrero 2018, 21:17 pm »

Mi intención es que el .jar en vez de ir a "C:\Users\kaiserdj\AppData\" cuando lo necesite vaya a la carpeta "data" porque cree que esa carpeta es el path de %APPDATA%.

No se si me entenderás, me resulta difícil de explicar. :-[
Muchas gracias por la ayuda y un saludo
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: set APPDATA en C#
« Respuesta #4 en: 6 Febrero 2018, 22:09 pm »

He probado el código que me diste, el problema es que no coge como PATH de APPDATA la carpeta "data" si no la carpeta "AppData" por defecto de windows

Por supuesto, el ejemplo que mostré solo era para declarar una variable normal y corriente, no una variable de entorno. No se entendía muy bien lo que querías hacer.

Para crear o modificar una variable de entorno almacenada en el proceso actual, puedes utilizar el método System.Environment.SetEnvironmentVariable().

Código
  1. string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");
  2. Environment.SetEnvironmentVariable("APPDATA", dirpath)
  3.  
  4. string envValue = Environment.GetEnvironmentVariable("APPDATA");
  5. Console.WriteLine(envValue);

Ten en cuenta que la modificación solo afecta a la instancia del proceso actual, y a los procesos hijos de este, igual que ocurre con la CMD.

Saludos!
« Última modificación: 6 Febrero 2018, 22:16 pm por Eleкtro » En línea

kaiserdj

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: set APPDATA en C#
« Respuesta #5 en: 6 Febrero 2018, 22:39 pm »

Por supuesto, el ejemplo que mostré solo era para declarar una variable normal y corriente, no una variable de entorno. No se entendía muy bien lo que querías hacer.

Para crear o modificar una variable de entorno almacenada en el proceso actual, puedes utilizar el método System.Environment.SetEnvironmentVariable().

Código
  1. string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");
  2. Environment.SetEnvironmentVariable("APPDATA", dirpath)
  3.  
  4. string envValue = Environment.GetEnvironmentVariable("APPDATA");
  5. Console.WriteLine(envValue);

Ten en cuenta que la modificación solo afecta a la instancia del proceso actual, y a los procesos hijos de este, igual que ocurre con la CMD.

Saludos!
Eres un genio, muchas gracias
Era justo lo que necesitaba <3 ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Nuevo troyano] C:\Users\Natalia\AppData\Roaming\BrowserCompanion\tcbhn.exe
Seguridad
Graphixx 1 5,678 Último mensaje 30 Junio 2012, 01:50 am
por r32
ejecutar aplicacion en %appdata%
Scripting
asdexiva 3 4,813 Último mensaje 8 Septiembre 2013, 01:18 am
por Eleкtro
MOVIDO: set APPDATA en C#
Programación Visual Basic
Eleкtro 0 2,326 Último mensaje 6 Febrero 2018, 16:53 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines