Elemental
2005-06-14, 16:58:22
Gibt es eine elegante Methode ein dir Kommando in C# abzusetzen?
Ich versuche eine Liste der files im GAC zu kriegen und wollte das mit "dir" tun:
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
StreamWriter sw = null;
sw = File.CreateText(@"d:\GACFiles.txt");
string strGACFolder = GetWindowsDirectory() + "\\assembly";
string strOutput=string.Empty;
CallCommand("cmd", "/c dir /S " + strGACFolder, ref strOutput);
int i=0;
}
[DllImport("kernel32.dll",SetLastError=true)]
private static extern uint GetWindowsDirectory(StringBuilder lpBuffer, uint usize);
/// <summary>
/// Gets the path to the windows directory
/// </summary>
/// <returns>path to windows directory</returns>
public static string GetWindowsDirectory()
{
const int MAX_PATH = 260;
StringBuilder buffer = new StringBuilder(MAX_PATH+1);
if(GetWindowsDirectory(buffer, MAX_PATH+1)>1)
{
return buffer.ToString();
}
else
{
throw new Exception("Windows-Error " + Marshal.GetLastWin32Error() + "while retrieving the windows directory");
}
}
static private void CallCommand(string program, string arguments, ref string output)
{
StreamReader srOut;
StreamReader srErr;
ProcessStartInfo psi = new ProcessStartInfo(program, arguments);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = false;
try
{
Process p = Process.Start(psi);
srOut = p.StandardOutput;
srErr = p.StandardError;
if (p != null)
{
p.WaitForExit();
output = srOut.ReadToEnd() + "\n" + srErr.ReadToEnd();
}
}
catch (Exception ex)
{
throw;
}
}
}
Ich starte also cmd.exe mit "dir als Parameter. Allerdings beendet sich der Prozess nicht, obwohl ich als Parameter von cmd.exe auch /C angebe.
Ich weiss momentan echt nicht weiter...
Kann man das vielleicht ganz anders machen?
mfG
Elemental
Ich versuche eine Liste der files im GAC zu kriegen und wollte das mit "dir" tun:
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
StreamWriter sw = null;
sw = File.CreateText(@"d:\GACFiles.txt");
string strGACFolder = GetWindowsDirectory() + "\\assembly";
string strOutput=string.Empty;
CallCommand("cmd", "/c dir /S " + strGACFolder, ref strOutput);
int i=0;
}
[DllImport("kernel32.dll",SetLastError=true)]
private static extern uint GetWindowsDirectory(StringBuilder lpBuffer, uint usize);
/// <summary>
/// Gets the path to the windows directory
/// </summary>
/// <returns>path to windows directory</returns>
public static string GetWindowsDirectory()
{
const int MAX_PATH = 260;
StringBuilder buffer = new StringBuilder(MAX_PATH+1);
if(GetWindowsDirectory(buffer, MAX_PATH+1)>1)
{
return buffer.ToString();
}
else
{
throw new Exception("Windows-Error " + Marshal.GetLastWin32Error() + "while retrieving the windows directory");
}
}
static private void CallCommand(string program, string arguments, ref string output)
{
StreamReader srOut;
StreamReader srErr;
ProcessStartInfo psi = new ProcessStartInfo(program, arguments);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = false;
try
{
Process p = Process.Start(psi);
srOut = p.StandardOutput;
srErr = p.StandardError;
if (p != null)
{
p.WaitForExit();
output = srOut.ReadToEnd() + "\n" + srErr.ReadToEnd();
}
}
catch (Exception ex)
{
throw;
}
}
}
Ich starte also cmd.exe mit "dir als Parameter. Allerdings beendet sich der Prozess nicht, obwohl ich als Parameter von cmd.exe auch /C angebe.
Ich weiss momentan echt nicht weiter...
Kann man das vielleicht ganz anders machen?
mfG
Elemental