ứng dụng của chúng tôi có một sợi nền mà spawns một quá trình thông qua System.Diagnostics.Process
:Process sinh ra thông qua Process.Start trong .NET treo sợi
Process.Start(
new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
}
);
này sử dụng để không có vấn đề gì cả. Nhưng bây giờ, sợi nền đang âm thầm chết; nó không bao giờ trở về từ cuộc gọi đến Process.Start
. Khối catch cho mã này, xử lý System.Exception
, cũng không đạt được. Ngay cả khi tôi cho phép xử lý ngoại lệ khi được ném vào trình gỡ rối Visual Studio, tôi không thấy ngoại lệ. Kỳ lạ thay, quá trình này được sinh ra tốt; trình duyệt mặc định cho người dùng được khởi chạy với URL dự kiến.
Điểm nhập của quy trình của chúng tôi được đánh dấu là [STAThread]
như được đề xuất.
Điều gì có thể khiến chuỗi của chúng tôi bị chấm dứt âm thầm? Có bất kỳ kỹ thuật tôi có thể sử dụng để gỡ lỗi những gì đang xảy ra trong quá trình chấm dứt thread?
Cập nhật:
Dường như sợi chỉ còn sống sau khi tất cả; nó chỉ không quay trở lại từ cuộc gọi. Dưới đây là stack trace của nó:!
- [Trong một chờ đợi giấc ngủ hoặc tham gia]
- System.dll System.Diagnostics.ShellExecuteHelper.ShellExecuteOnSTAThread() + 0x63 byte
- System.dll System.Diagnostics.Process .StartWithShellExecuteEx (System.Diagnostics.ProcessStartInfo StartInfo) + 0x19d byte
- System.dll! System.Diagnostics.Process.Start() + 0x39 byte
- System.dll! System.Diagnostics.Process.Start (System.Diagnostics .ProcessStartInfo startInfo) + 0x32 bytes .210
- Phương pháp của tôi
Cập nhật 2:
Lễ ra mắt cmd.exe mà không sử dụng vỏ để thực hiện hoạt động như một workaround. Cảm ơn nhiều! Tuy nhiên, tôi vẫn muốn biết lý do tại sao cuộc gọi không trả lại.
Cập nhật 3:
Shell móc làm âm thanh như một lời giải thích hợp lý cho những gì có thể gây ra các cuộc gọi đến không quay trở lại. Tôi không thể tìm thấy mô-đun giả mạo, nhưng sau lần thử cuối cùng để chạy mọi thứ thông qua thực thi trình bao, cuộc gọi đã thực hiện trả lại.
Trong mọi trường hợp, có thể người dùng có thể đã tải tiện ích mở rộng có thể gây rối với quá trình khởi chạy và khiến mã của tôi không trả lại. Chúng tôi không thể thực hiện bất kỳ điều gì về rằng, vì vậy, câu trả lời đúng là sử dụng giải pháp thay thế quy trình cmd.exe.
Không có gì ngạc nhiên với việc bổ sung 'Trace.WriteLine'; "Quá trình đã bắt đầu". không đạt được dòng. – Jacob
Khi bắt đầu cmd.exe, cuộc gọi vẫn không quay trở lại. – Jacob
Bah, nhưng nếu tôi chuyển UseShellExecute thành false. – Jacob