TL; DR
Каковы точные, низкоуровневые вызовы ядра и ОС, которые выполняются, когда пользователь дважды щелкает или выбирает файл и нажимает клавишу Enter
из проводника Windows?
Подробнее
Это может показаться довольно странным вопросом, но мне любопытно очень "подробные" подробности открытия файла из проводника Windows.
В частности, то, что я хотел бы знать, - это точные, низкоуровневые вызовы ядра и ОС, которые выполняются, когда пользователь дважды щелкает или выбирает файл и нажимает клавишу Enter
из проводника Windows.
Причина, по которой я спрашиваю, заключается в том, что у меня есть приложение, которое позволяет пользователям просматривать и искать файлы на основе метаданных, хранящихся в базе данных. Когда пользователь нажимает кнопку Open
, которую я предоставил, я запускаю процесс, в котором корневой файл представляет собой путь к выбранному файлу. Кроме того, стоит упомянуть, что эти файлы находятся в сетевом ресурсе.
Это работало годами, однако недавно моя компания перешла на новый сервер Active Directory, и теперь приложение разбито на очень небольшое количество пользователей (1-2%.) Самое странное, что эти пользователи не могут открыть этот файл из моего приложения, но они могут перейти к местоположению и открыть его из проводника Windows. Когда мое приложение пытается открыть файл, оно получает очень общее исключение, заявляя, что файл не может быть найден.
Я проверил тройной путь, который использует приложение (для нескольких файлов), и путь не является неправильным. Я подтвердил, что мои пользователи подключены к этим сетевым дискам и открывают файлы. Все правильно настроено и должно работать, но мое приложение (или System.Process
) не может "видеть" или открывать эти файлы.
Что делает приложение Windows Explorer по-другому, чем использование System.Process
из приложения?
Для тех, у кого должен быть код перед ответом, вот исключительно краткий код, который я использую для открытия файла. Опять же, это работало много лет и, насколько мне известно, заключается в том, как вы разрешаете Windows открывать файл из .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"
}
Еще одна вещь. Я нашел этот вопрос на SO, но он не должен/не должен применяться к этому вопросу. Мое приложение просто пытается открыть PDF файлы и некоторые инженерные файлы чертежей. Ничего необычного, и он не должен требовать доступа администратора. Кроме того, я не считаю, что требуется аутентификация пользователя, поскольку большинство пользователей никогда не получают это сообщение, и они уже проверили себя в сети, выполнив вход в систему и просмотрев ее в сетевом расположении.