2015-07-27 29 views
8

Tôi có tệp .exe cần chạy sau khi tạo tệp. Các tập tin được tạo thành công và tôi đang sử dụng đoạn mã sau để chạy các tập tin .exe sau đó:Process.Start() không bắt đầu tệp .exe (hoạt động khi chạy thủ công)

ProcessStartInfo processInfo = new ProcessStartInfo(); 
processInfo.FileName = pathToMyExe; 
processInfo.ErrorDialog = true; 
processInfo.UseShellExecute = false; 
processInfo.RedirectStandardOutput = true; 
processInfo.RedirectStandardError = true;       
Process proc = Process.Start(processInfo); 

Tôi cũng đã cố gắng với một đơn giản Process.Start(pathToMyExe); nhưng file .exe không chạy. Khi tôi thử pathToMyExe theo cách thủ công trên Windows Explorer chương trình của mình được chạy chính xác. Nhưng không phải thông qua chương trình. Những gì tôi thấy là con trỏ chuyển sang chờ một vài giây và sau đó trở lại bình thường. Vì vậy, không có ngoại lệ ném hoặc. Điều gì đang chặn tệp?

+8

sức mạnh tâm linh của tôi đang nói với tôi bạn cần phải thiết lập các 'WorkingDirectory'. – Luaan

+1

Bạn * chắc chắn * nó không hoạt động? Bạn đã chuyển hướng đầu ra tiêu chuẩn, nhưng bạn không đăng bất kỳ mã nào liên quan đến việc xử lý đầu ra được chuyển hướng. Do đó, bạn sẽ không thấy bất kỳ đầu ra nào trừ khi bạn xử lý nó một cách đặc biệt. Tôi giả định đây là một ứng dụng Console btw. –

+1

@Luaan bạn nói đúng. Bạn có thể đăng nó làm câu trả lời. – Disasterkid

Trả lời

15

Bạn không đặt đường dẫn thư mục làm việc và không giống như khi khởi động ứng dụng thông qua Explorer, nó không được đặt tự động đến vị trí của tệp thực thi.

Chỉ cần làm một cái gì đó như thế này:

processInfo.WorkingDirectory = Path.GetDirectoryName(pathToMyExe); 

(giả sử các tập tin đầu vào, DLL vv có trong thư mục đó)

+0

Triệu nhờ bạn Luaan. –

0

Do thư mục làm việc khác nhau, bạn phải thiết lập thư mục làm việc của bạn đúng cách để đường dẫn mà bạn muốn quá trình của bạn bắt đầu.

Một cuộc biểu tình của mẫu xe này có thể là:

Process process = new Process() 
{ 
    StartInfo = new ProcessStartInfo(path, "{Arguments If Needed}") 
    { 
     WindowStyle = ProcessWindowStyle.Normal, 
     WorkingDirectory = Path.GetDirectoryName(path) 
    } 
}; 

process.Start(); 
1
private void Print(string pdfFileName) 
    { 
     string processFilename = Microsoft.Win32.Registry.LocalMachine 
    .OpenSubKey("Software") 
    .OpenSubKey("Microsoft") 
    .OpenSubKey("Windows") 
    .OpenSubKey("CurrentVersion") 
    .OpenSubKey("App Paths") 
    .OpenSubKey("AcroRd32.exe") 
    .GetValue(string.Empty).ToString(); 

     ProcessStartInfo info = new ProcessStartInfo(); 
     info.Verb = "print"; 
     info.FileName = processFilename; 
     info.Arguments = string.Format("/p /h {0}", pdfFileName); 
     info.CreateNoWindow = true; 
     info.WindowStyle = ProcessWindowStyle.Hidden; 
     ////(It won't be hidden anyway... thanks Adobe!) 
     info.UseShellExecute = false; 

     Process p = Process.Start(info); 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

     int counter = 0; 
     while (!p.HasExited) 
     { 
      System.Threading.Thread.Sleep(1000); 
      counter += 1; 

      if (counter == 5) 
      { 
       break; 
      } 
     } 

     if (!p.HasExited) 
     { 
      p.CloseMainWindow(); 
      p.Kill(); 
     } 
    } 
Các vấn đề liên quan