2013-10-10 7 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 в начале.

EDIT

аргументы являются глобальными переменными, и определены ранее в сценарии.

EDIT

Вот глобальные переменные, на которые ссылается. Обратите внимание на жесткое кодирование пути.

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"; 

ОБНОВЛЕНИЕ

Благодаря использованию надлежащих методов отладки (ниже), источник проблема была решена .., название изм.

+0

Старая проблема заключалась в вызове оболочки, но об этом позаботились .. для другого экземпляра. Весь скрипт находится здесь http://social.msdn.microsoft.com/Forums/vstudio/en-US/2d88cf3b-89b7-4c45-bdfa-ba5ba52acdfa/a-program-that-compares-two-id-and-does -something-when-they-are-different-faulty-processstart? forum = csharpgeneral – DaFuze

+0

Вы уверены, что его игнорируют, а не просто ошибки? Кроме того, ProcessStartInfo может не иметь того же контекста, что и при его запуске из командной строки, так что вы предоставляете полный путь. Наблюдение этих других переменных поможет. –

+0

Возможно, путь должен быть просто именем файла, поскольку это была ошибка в двух предыдущих обстоятельствах, и они имеют один и тот же каталог (- нет, это не так). Переменные включены. – DaFuze

ответ

0

Вы уверены, что предложение try/catch вверх немного, что может проглотить исключение?

Существует нет способа Process.Start только «Игнорируется». Код либо не достигает, либо выполняет его, а просто не так, как вы ожидали.

Есть несколько вещей, которые я предлагаю, установить точку останова в первой строке метода и пройти через все остальное и посмотреть, что происходит - особенно в локалях/окне просмотра. Другое дело - сломать завершение и использовать intellisense, чтобы посмотреть, есть ли какие-либо другие проглоченные исключения в рамках или в вашем коде.

+0

Хорошо, oldserverID исправлен с использованием контрольных точек. Я посмотрю, что происходит с intellisense. – DaFuze

+0

Хорошо, логт был сломан. Ему нужно было имя файла, а не прямой путь. – DaFuze

Смежные вопросы