2013-10-10 4 views
-2

질문은 주로 Read() 메서드에 있습니다.결함있는 ProcessStartInfo 및 Process.Start? (제대로 디버깅?)

public static void Read(object source, ElapsedEventArgs e) 
{ 
    serverID = File.ReadAllText(sidname); 
    Console.WriteLine("Current ID: " + serverID); 
    if (serverID != oldserverID && serverID != "default" && serverID != "") 
    { 
     ProcessStartInfo servqueued = new ProcessStartInfo(); 
     servqueued.Arguments = ramlimit + " " + spname + " " + sidname + " " + resourcetxt + " " + ramoutput + " " + rootpath + Path.DirectorySeparatorChar + " " + makeserverpath + " " + Logpath + " " + servqueuepath; 
     servqueued.FileName = fileservepath; 
     servqueued.WindowStyle = ProcessWindowStyle.Normal; 
     servqueued.CreateNoWindow = false; 
     Process queue; 
     queue = Process.Start(servqueued); 
     Console.WriteLine("Server process queued with server name: " + serverID); 
     File.AppendAllLines(logpath, new string[] { DateTime.Now.ToString("HH:mm:ss tt") + ": ", "Server process queued with server name " + serverID }); 
     oldserverID = serverID; 
    } 
} 

왜 Process.Start가 무시되는지 확실하지 않습니다. 나머지 부분은 괜찮습니다. 예를 들어 처음에 oldserverID를 넣으면됩니다.

인수는 글로벌 변수는, 이전의 스크립트에서 정의 된

편집 할 수 있습니다. 여기

편집을 참조하는 글로벌 변수입니다. 하드 코딩 경로를주의하십시오.

rootpath = "%USERPROFILE%" + Path.DirectorySeparatorChar +"desktop" + Path.DirectorySeparatorChar + "TerrariaServer" + Path.DirectorySeparatorChar + "filebin"; 
logpath = rootpath + Path.DirectorySeparatorChar + "fr_log.txt"; 
servqueuepath = rootpath + Path.DirectorySeparatorChar + "queuecheck.txt"; 
spname = "serverparams.cmd"; 
sidname = "serverid.cmd"; 
resourcetxt = rootpath + Path.DirectorySeparatorChar + "ramcheck.txt"; 
ramoutput = rootpath + Path.DirectorySeparatorChar + "sysresourceoutput.exe"; 
makeserverpath = rootpath + Path.DirectorySeparatorChar + "update.bat"; 
Logpath = rootpath + Path.DirectorySeparatorChar + "fsrv_log.txt"; 
fileservepath = rootpath + Path.DirectorySeparatorChar + "FileServe.exe"; 

적절한 디버깅 방법 (아래)의 사용을 통해

UPDATE 문제 소스 .. 해결하고, 타이틀 편집.

+0

이전 문제는 쉘이 호출되는 것이었지만 다른 인스턴스에 대해서는 처리되었습니다. 전체 스크립트는 http://social.msdn.microsoft.com/Forums/vstudio/en-US/2d88cf3b-89b7-4c45-bdfa-ba5ba52acdfa/a-program-that-compares-two-id-and-does에 있습니다. - 뭔가 - 언제든지 - 그들이 - 다른 - 결함 - processstart? 포럼 = csharpgeneral – DaFuze

+0

당신은 그 무시되고 그냥 오류가 아니라고 확신합니까? 또한 ProcessStartInfo는 명령 행에서이 명령문을 실행할 때와 동일한 컨텍스트를 가질 수 없으므로 전체 경로를 제공하고 있습니다. 그러한 다른 변수들을 보는 것이 도움이 될 것입니다. –

+0

아마도 경로는 이전의 두 가지 상황에서의 오류 였기 때문에 단순히 파일 이름이어야하며 같은 디렉토리 (- 아니요, 그렇지 않은 경우)를 공유합니다. 변수가 포함되었습니다. – DaFuze

답변

0

예외를 삼킬 수있는 약간의 위쪽에 try/catch 절이 없다고 확신합니까?

Process.Start는 단지 "무시 됨"입니다. 코드가 도달하지 못하거나 실행 중이지만 예상대로 실행되지 않습니다.

메소드의 첫 번째 줄에 중단 점을 설정하고 나머지 부분을 단계별로 살펴보고 일어나는 일을 살펴 봅니다. 특히 현지/시계 창에서 특히 그렇습니다. 다른 하나는 프레임 워크 나 코드에 삼켜지는 예외가 있는지 알아보고 완료 할 때 중단하고 인텔리 센스를 사용하는 것입니다.

+0

좋아요, oldserverID는 중단 점을 사용하여 다시 수정되었습니다. 나는 인텔리 센스 (Intellisense)에서 어떤 일이 일어나는지 보게 될 것이다. – DaFuze

+0

좋아요, 로그 경로가 깨졌습니다. 직접 경로가 아닌 파일 이름이 필요했습니다. – DaFuze