Я думаю, что причина, по которой параметры строки запроса не переопределяют значения по умолчанию, заключается в том, чтобы не дать людям взломать URL.
Кто-то может использовать URL-адрес, строка запроса которого содержит контроллер, действие или другие значения по умолчанию, которые вы не хотели, чтобы они меняли.
Я справился с этой проблемой, выполнив то, что предложил @ Dale-Ragan, и применил ее в методе действий. Работает для меня.
Вам необходимо установить атрибуты файла перед запуском процесса, а затем вернуть их при открытии.
Пример:
var attributes = File.GetAttributes(path);
File.SetAttributes(filePath, attributes | FileAttributes.ReadOnly);
System.IO.Diagnostics.Process.Start(fileName);
File.SetAttributes(filePath, attributes);
Примечание: Это изменит файл атрибуты фактического файла, так что имейте это в виду.
К сожалению, способ выполнения этой операции зависит от типа файла.
Лучший вариант - проверить свойство ProcessStartInfo.Verbs на наличие известного глагола для вашего тип файла. Обычно это OpenAsReadOnly. Затем вы задаете этот глагол и запускаете процесс с ProcessStartInfo .
Просто поймите - это работает не для всех типов файлов, так как программа предоставляет и обрабатывает соответствующий глагол.
Можете ли вы скопировать файл во временное место, а затем использовать временный файл для запуска программы?
Затем вы могли бы отслеживать процесс и после его выхода удалить временный файл?
Process.Start запускает любую программу, связанную с этим файлом. Вы не можете указать ему открыть файл только для чтения, если программа не поддерживает аргумент командной строки, указывающий, что он должен открываться только для чтения (или если он поддерживает команду OpenAsReadOnly).
Вы можете установить атрибуты файла на файл только для чтения перед его открытием, но я не думаю, что это то, что вам нужно.
Зависит от того, имеет ли зарегистрированное приложение переключатель / параметр для поддержки режима только для чтения. Если это так, вы можете передать параметр только для чтения. В вашем случае я не думаю, что Process.Start может работать, если нет опции только для чтения.