set APPDATA en C#

Iniciado por kaiserdj, 6 Febrero 2018, 12:19 PM

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

kaiserdj

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:

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

Eleкtro

#1
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 (csharp) [Seleccionar]
using System.IO;
(...)

// set APPDATA=%CD%\data
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 (csharp) [Seleccionar]
using System.Diagnostics;
using System.IO;
(...)

// bin\game.jar
using (Process p = new Process()) {
   p.StartInfo.FileName = @".\bin\game.jar";
   p.StartInfo.UseShellExecute = true;
   p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);

   p.Start();
}


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!








kaiserdj

#2
Cita de: Eleкtro 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 (csharp) [Seleccionar]
using System.IO;
(...)

// set APPDATA=%CD%\data
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 (csharp) [Seleccionar]
using System.Diagnostics;
using System.IO;
(...)

// bin\game.jar
using (Process p = new Process()) {
   p.StartInfo.FileName = @".\bin\game.jar";
   p.StartInfo.UseShellExecute = true;
   p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);

   p.Start();
}


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

kaiserdj

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

Eleкtro

#4
Cita de: kaiserdj en  6 Febrero 2018, 21:09 PMHe 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 (csharp) [Seleccionar]
string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");
Environment.SetEnvironmentVariable("APPDATA", dirpath)

string envValue = Environment.GetEnvironmentVariable("APPDATA");
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!








kaiserdj

Cita de: Eleкtro en  6 Febrero 2018, 22:09 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 (csharp) [Seleccionar]
string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");
Environment.SetEnvironmentVariable("APPDATA", dirpath)

string envValue = Environment.GetEnvironmentVariable("APPDATA");
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 ;-)