TL; DRTrong Windows, điều gì sẽ xảy ra rõ ràng khi tôi nhấp đúp vào một tệp trong Windows Explorer?
gì là chính xác, các cuộc gọi ở mức độ thấp OS kernel & đang được thực hiện khi người dùng hoặc click đúp chuột hoặc chọn một tập tin và nhấn phím Enter
từ bên trong Windows Explorer?
Chi tiết
Điều này có vẻ như một câu hỏi khá kỳ quặc, nhưng tôi tò mò về các chi tiết rất "nitty-gritty" mở một tập tin từ Windows Explorer. Cụ thể, những gì tôi muốn biết là các cuộc gọi HĐH chính xác, cấp thấp & đang được thực hiện khi người dùng nhấp đúp hoặc chọn tệp và nhấn phím Enter
từ bên trong Windows Explorer.
Lý do tôi hỏi là vì tôi có một ứng dụng cho phép người dùng duyệt và tìm kiếm các tệp dựa trên siêu dữ liệu được lưu trữ trong cơ sở dữ liệu. Khi người dùng nhấp vào nút Open
mà tôi đã cung cấp, tôi bắt đầu quá trình trong đó tệp gốc là đường dẫn đến tệp đã được chọn. Ngoài ra, điều đáng nói là các tệp này nằm trên một mạng chia sẻ.
Điều này đã hoạt động trong nhiều năm, tuy nhiên, gần đây công ty của tôi đã di chuyển sang máy chủ Active Directory mới và bây giờ ứng dụng bị hỏng cho một số ít người dùng (1-2%.) người dùng không thể mở tệp này từ ứng dụng của tôi, nhưng họ có thể duyệt đến vị trí và mở nó từ Windows Explorer. Khi ứng dụng của tôi cố gắng mở tệp, nó nhận được một ngoại lệ rất chung chung cho biết rằng không thể tìm thấy tệp.
Tôi đã ba kiểm tra đường dẫn mà ứng dụng đang sử dụng (cho nhiều tệp) và đường dẫn không chính xác. Tôi đã xác minh rằng người dùng của mình đã và đang kết nối với các ổ đĩa mạng này trước khi mở tệp. Mọi thứ đều được thiết lập chính xác và sẽ hoạt động nhưng ứng dụng của tôi (hoặc System.Process
) không thể "xem" hoặc mở các tệp này.
Ứng dụng Windows Explorer hoạt động khác với cách sử dụng System.Process
từ bên trong ứng dụng là gì?
Đối với những người phải có mã trước khi trả lời, đây là mã đặc biệt mà tôi sử dụng để mở tệp. Một lần nữa, điều này đã làm việc trong nhiều năm và, tốt nhất tôi biết, là cách bạn để Windows mở một tệp từ bên trong .Net.
//From within my Button-Click Event...
string file = e.Cell.Value.ToString();
try
{
Process p = new Process();
p.StartInfo.FileName = file;
p.StartInfo.Verb = "Open";
p.Start();
}
catch (Exception ex)
{
MessageBox.Show("A problem has occurred while trying to open the doccument."
+ "Please make sure that the file below exists and that you have permission "
+ "to view it."
+ Environment.NewLine + Environment.NewLine
+ file
+ Environment.NewLine + "---------------" + Environment.NewLine +
ex.Message
);
//ex.Message states "The system cannot find the file specified"
}
Một điều nữa. Tôi tìm thấy this question trên SO nhưng nó không/không nên áp dụng cho câu hỏi này. Ứng dụng của tôi chỉ đơn giản là cố gắng mở các tệp PDF và một số tệp vẽ kỹ thuật. Không có gì lạ mắt và không nên yêu cầu quyền truy cập quản trị. Ngoài ra, tôi không tin rằng bất kỳ xác thực người dùng nào cũng được yêu cầu vì hầu hết người dùng không bao giờ nhận được thông báo này và họ đã tự xác thực trên mạng bằng cách đăng nhập và duyệt đến vị trí mạng.
Có sự tương đồng nào giữa các máy khách không hoạt động ở cấp PC không? Họ đang ở trên một hệ điều hành khác với những người đang làm việc? –
Thật khó để nói. CNTT của chúng tôi đã thực hiện chuyển đổi MASSIVE Windows 7 ngay trước khi di chuyển AD. Người dùng có tài khoản người dùng mới và nhiều người dùng đã sẵn sàng nâng cấp máy tính hoặc gần với thời gian đã lên kế hoạch của họ, được cấp máy tính mới với Win 7. Người quản lý đang gặp sự cố và nói chuyện với tôi nhiều nhất vẫn bị kẹt với Windows XP. Tuy nhiên, nó luôn luôn làm việc cho anh ta trên máy tính này trong quá khứ - anh ta vừa được cấp một tài khoản mới trên miền AD mới để bắt đầu sử dụng. Chúng tôi đã kiểm tra ba lần quyền của anh ấy. Anh ấy có thể duyệt đến vị trí và mở các tệp này, nhưng ứng dụng của tôi không thể? – RLH
Có phải chỉ thất bại trên PDF? Bạn đang sử dụng Acrobat? Acrobat không hoạt động tốt với .NET. Nó là đơn .exe mà từ bên ngoài sẽ chỉ mở một tập tin tại một thời điểm. Và nếu nó hoạt động đôi khi sẽ không phản hồi. Cố gắng để lưu trữ xem trong. NET là vấn đề lúc tốt nhất - cho một trong những nó ăn key xuống sự kiện. – Paparazzi