Kjør .bat fil gjennom C # -kode som annen bruker lydløst

stemmer
3

Jeg kjører en batch-fil med noen få sekunder å gjøre timesync med serveren ved hjelp av følgende kode:

Process process = new Process();

process.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System);

process.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), cmd.exe);
process.StartInfo.Arguments = @/C C:\TimeSync.bat;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UserName = username;

SecureString pwd = new SecureString();

Char[] pwdCharacters = password.ToCharArray();
foreach (char t in pwdCharacters)
{
    pwd.AppendChar(t);
}

process.StartInfo.Password = pwd;

process.Start();
string output = process.StandardOutput.ReadToEnd();

Problemet er den blinker kommandoen vinduer på skjermen som jeg ikke ønsker. Hvordan kan jeg unngå det?

En oppførsel jeg har sett er hvis jeg kjører den samme koden med UseShellExecute = trueog gir ikke brukernavn og passord og kommandovinduet blinker ikke.

Så i utgangspunktet ønsker jeg å kjøre .bat fila med C # -kode som annen bruker lydløst.

Publisert på 10/01/2011 klokken 17:38
kilden bruker
På andre språk...                            


4 svar

stemmer
0

Visste du prøver å bare oppgi:

process.StartInfo.CreateNoWindow=true;

?

Svarte 10/01/2011 kl. 17:44
kilden bruker

stemmer
0

Du kan bruke etterligning. Jeg har skrevet en etterligning klasse som implementerer IDisposablegrensesnittet og er ganske grei å bruke, håper jeg.

Svarte 10/01/2011 kl. 17:45
kilden bruker

stemmer
1

Fordi du passerer et brukernavn og passord, er CreateNoWindow parametrene ikke respektert. Dette er en funksjon (dvs. bug) i Windows. Her er de fem år gamle koble detaljer:

http://connect.microsoft.com/VisualStudio/feedback/details/98476/cmd-windows-shows-using-process-with-createnowindow-when-using-username-password-option

Process.Start () kaller ADVAPI32.dll er CreateProcessWithLogonW i tilfelle at en bruker leverer et brukernavn og passord, og CreateProcessWithLogonW åpner alltid et nytt vindu. Dessverre er det ingen løsning for dette problemet

En utmerket oversikt over skape noe vindu alternativet er gitt her: http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx som også påpeker feil i MSDN dokumentasjon på dette emnet .

Og det er en veldig god oversikt i denne Stackoverflow svar: Hvordan skjule cmd vindu mens du kjører en batch-fil?

Til slutt, jeg tror du vil opprette en egen liten app som du ringe ut til bare én gang, og det går hele tiden, som eskalerte brukeren. Det kan deretter utføre tiden sync så ofte du vil, på samme måte som du har beskrevet ovenfor, men uten å oppgi brukernavn og passord. Dermed vil det bare være en 'flash' av et konsollvindu for hele varigheten av programmet.

Håper dette hjelper lb

Svarte 23/01/2011 kl. 09:25
kilden bruker

stemmer
1

Endre linje:

process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;

til

 process.StartInfo.WindowStyle =
 ProcessWindowStyle.Hidden;

Det vil skjule vinduet og aldri vise det.

Håper det hjelper!

Phil

Svarte 09/03/2011 kl. 08:33
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more