2015-02-02 3 views
2

Я использую следующий код, чтобы открыть jpg -файлы:Process.Start() не для * .jpg-файлы

var file = @"C:\Users\administrator.ADSALL4SPS\Desktop\IMG_4121.JPG"; 
var processStartInfo = new ProcessStartInfo { Verb = "open", FileName = file }; 
var workDir = Path.GetDirectoryName(file); 
if (!string.IsNullOrEmpty(workDir)) { 
    processStartInfo.WorkingDirectory = workDir; 
} 
try { 
    Process.Start(processStartInfo); 
} catch (Exception e) { 
    // Errorhandling 
} 

Теперь, когда я делаю это, я получаю всегда Win32Exception с NativeErrorCode = ERR_NO_ASSOCIATION

Но расширение *.jpg связано с MSPaint.

При двойном щелчке по файлу Файл открывается в MSPaint.

Почему существует Win32Exception, даже файл связан?

+0

Это приложение для Windows? – aliboy38

+1

Да - это приложение WindowsApplication (.NET 4 с winforms) – BennoDual

+0

Вы хотите использовать picturebox? – aliboy38

ответ

3

Вполне возможно, что расширение JPG не имеет явный открытого глагола зарегистрированного для него, в этом случае вы можете пропустить и лежащая в основе ShellExecute функции будут использовать первый зарегистрированный глагол (который, в вашем случае , может быть редактировать):

var processStartInfo = new ProcessStartInfo { FileName = file }; 

свойство ProcessStartInfo.Verbs содержит все зарегистрированные глаголы для данного имени файла.

1

Попробуйте это:

 string file = @"C:\Users\administrator.ADSALL4SPS\Desktop\IMG_4121.JPG"; 
     System.Diagnostics.Process.Start(file); 

Потому что вы хотите, чтобы открыть этот файл с помощью окна приложения по умолчанию, необходимо использовать System.Diagnostics.Process.Start для открытия файлов с приложениями по умолчанию.

+0

Это выглядит почти так же, как и то, что они делали в вопросе, они просто использовали перегрузку, которая принимает ProcessStartInfo, а не только строку. То же самое, не так ли? –

+0

@MobyDisk No. Они разные. Прочтите код еще раз, вы увидите разницу между ними. Пользователь пытался использовать 'Verb', но я вообще этого не использовал. И этот ответ - всего две строки кодов, которые могут быть написаны даже с одной строкой, поэтому это лучше и дает лучшее время компиляции. – aliboy38