none
llamar diskpart.exe desde la raiz de la apliacion de c# de consola RRS feed

  • Pregunta

  • Hola buenas madrugadas, quiero llamar al diskpart.exe de una aplicacion de consola para formatear y preparar un disco duro y/o pendrive, lo hago de esta manera, mapeandome al diskpart.exe llamandolo desde la carpeya system32:

     p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardOutput = true;


                    p.StartInfo.FileName = @"C:\Windows\System32\diskpart.exe";
                    p.StartInfo.RedirectStandardInput = true;
                    p.Start();
                    p.StandardInput.WriteLine("select disk " + strNDisk);
                    p.StandardInput.WriteLine("clean");
                    p.StandardInput.WriteLine("create partition primary size=" + strZise);
                    p.StandardInput.WriteLine("select partition 1");
                    //p.StandardInput.WriteLine("format fs=fat32 quick");
                    p.StandardInput.WriteLine("format " + strFormattype + " quick");
                    p.StandardInput.WriteLine("assign letter " + strLetterPartition);
                    p.StandardInput.WriteLine("active");
                    //p.StandardInput.WriteLine("assign");                         
                    p.StandardInput.WriteLine("exit");
                    string output = p.StandardOutput.ReadToEnd();
                    p.WaitForExit();
                    Console.WriteLine("Se creo particion de forma exitosa");


       Esto funciona, pero mi deseo es llamar al  diskpart.exe desde la raiz de la aplicacion de esta manera, osea me copie ese archivo en la misma carpeta de la apliacion:

     p.StartInfo.FileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + @"diskpart.exe");

    Pero no me funciona, no me formatea el  dispositivo de almacenamiento, espero me puedan ayudar. Gracias


    lunes, 29 de enero de 2018 5:39

Respuestas

  • Para obtener la ruta del ejecutable actual o ensamblado que se ejecuta hay varias formas :

    Si se trata de un exe puedes usar Application.StartupPath y usar Path.combine de ese valor con el resto del path o fichero.

    Si es un ensamblado puedes usar la siguiente función:

            /// <summary>
            /// Devuelve la ruta del actual ensamblado.
            /// </summary>
            /// <returns></returns>
            public static string ObtenerRutaEnsambladoActual()
            {
                string codeBase = Assembly.GetExecutingAssembly().CodeBase;
                UriBuilder uri = new UriBuilder(codeBase);
                string path = Uri.UnescapeDataString(uri.Path);
                return Path.GetDirectoryName(path);
            }

    Y aqui otra forma de hacerlo 

    string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
    
    // obtenemos el directorio 
    var directory = System.IO.Path.GetDirectoryName(path);
    
    string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
    
    // obtenemos el directorio 
    var directory = System.IO.Path.GetDirectoryName(path);

    lunes, 29 de enero de 2018 7:05