[C#] Process.Start() Excel PopUp

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Surger, 16 Dec 2011.

  1. Surger

    Surger New Member

    Joined:
    15 Oct 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Доброе утро всем.
    Прошу помощи с некоей проблемкой, решений которой пока не могу найти.
    У меня есть программа запускающая эксель файлы через Process.Start(). В этом файле макрос, убирающий его на задний фон, делающий свою работу и убивающий эксель после окончания. Все это замечательно, но если при запуске эксель выдает всплывающее окно, например предупреждение о запуске макроса, либо ошибка связи.. любое всплывающее окно, программа тормозится на методе запуска (На той самой строчке Process.Start()) до тех пор пока это всплывающее окно не будет закрыто.
    Дабы не перклинивало всю программу, я решил делать запуск этих Эксель в отдельном потоке. Вот процедура выполняющаяся в этом отдельном потоке:

    Code:
      private void  AsyncProcessStart(AutoStartElement elem, AutoStartSheduler parent)
            {
            	if (File.Exists(elem.Process.StartInfo.FileName))
            	{
    	        	elem.Process.Start();
    	          
    	                while (!elem.Process.HasExited)
    	                {
    	                    Thread.Sleep(GlParams.SlowMotion);
    	                }
    	         
            	}
            	else
            	{
            		Message message = OtherFunctions.MessageBuilder(Status.Error, string.Format("Ошибка автозапуска. файл не найден ({0}-{1})", elem.Task.Name,elem.Process.StartInfo.FileName), "AutoStart");
                    Logger.Log(message);
            	}
                
    
            }
    Теперь программу не переклинивает, но поток тормозится на этой же строчке, и получить информацию для убийства ошибочного Эксель не предствляется возможным.

    Пробовал использовать StartInfo со значеним
    Code:
    proc.StartInfo.UseShellExecute = true;
    Результат тот же. Так же пробовал импортировать WinApi ShellExeceute, но он аналогично не может просто так запустить эксельку и не ждать от нее ответа. Кто нибудь сталкивался с подобной проблемой?
     
  2. Surger

    Surger New Member

    Joined:
    15 Oct 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Наконец нашел решение. Надо запускать не сам файл, а эксель с параметром файла.

    Недооформленное решение выглядит так:
    Code:
    System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
                  
                    info.FileName = @"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE";
                    info.Arguments = "\""+task.filePath+"\"";
                    info.UseShellExecute = false;
                    System.Diagnostics.Process proc = new Process();
                    proc.StartInfo = info;