2011-08-22 11 views
5

Quando provo a fare Process.Start("echo", "%cd%") solleva uno System.ComponentModel.Win32Exception: The system cannot find the file specified. Quando lo faccio manualmente in cmd funziona come dovrebbe. Non ho mai saputo che c'è una differenza ...Process.Start ("echo", "% cd%") genera W32Exception File Not Found

Inoltre, quando eseguo il comando File.Exists(logfile.txt) (senza percorso) di un file che dovrebbe essere definitivamente lì, restituisce false. Questo è il motivo per il echo sopra: debugging ...

Questo errore non si verifica sulla mia macchina di sviluppo, solo su un altro su cui sto effettuando il test.

Il percorso variabile sembra normale. Entrambi sono WinXP. Entrambi sono in esecuzione NET 3.5

+0

perché stai accedendo al file senza un percorso? btw è possibile ottenere la directory di lavoro corrente tramite 'Environment.CurrentDirectory' – Yahia

risposta

9

Prova Process.Start("cmd.exe", "/c echo %CD%")

quanto eco non è un eseguibile ma un comando all'interno.

+2

/C comando: Esegue il comando specificato e restituisce. Per quelli che si chiedono cosa abbia fatto. – Codezilla

1

Questo perché echo è una console di comando, non una domanda - non si trova all'interno di un file eseguibile a sé stante.

Per quanto riguarda il problema di esistenza del file, se si utilizza solo il nome del file senza il percorso, verrà visualizzato nella directory di lavoro, potrebbe essere diverso dalla directory contenente l'applicazione in esecuzione e completamente diverso da dove si pensa i file dovrebbero essere: dovresti qualificare pienamente i tuoi percorsi dopo esserti reso conto della configurazione delle applicazioni.

2

È possibile utilizzare System.Environment.CurrentDirectory se si desidera passare la directory di lavoro dell'applicazione per cmd. AFAIK% CD% è interno a cmd, ecco perché Process.Start non lo espande. Per le variabili di ambiente ordinarie è possibile utilizzare Environment.ExpandEnvironmentVariables.