.net С# не может найти ресурсы img при открытии с помощью exe

Мой исполняемый файл обрабатывает текстовые документы, и я хочу иметь возможность щелкнуть правой кнопкой мыши документы, выбрать «Открыть с помощью» и указать на мой исполняемый файл. Я могу дважды щелкнуть свой exe и выбрать файл для обработки с помощью OpenFileDialog, и он отлично работает. Однако, когда я открываю с помощью, я получаю ошибку FileNotFound.

Вот журнал ошибок:

System.IO.FileNotFoundException: attention.jpg
   at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
   at System.Drawing.Image.FromFile(String filename)
   at ImzaDogrulamaUygulamasi.frmCertificate.FillTreeView() in D:\VSS\SOURCE\VS2008\EGA\ImzaDogrulamaUygulamasi\ImzaDogrulamaUygulamasi\frmCertificate.cs:line 76
   at ImzaDogrulamaUygulamasi.frmCertificate.Form2_Load(Object sender, EventArgs e) in D:\VSS\SOURCE\VS2008\EGA\ImzaDogrulamaUygulamasi\ImzaDogrulamaUygulamasi\frmCertificate.cs:line 244
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

и вот как я добавляю свои изображения в свой код, все ресурсы находятся в одном каталоге с exe-файлом:

    ImageList myImageList = new ImageList();

    myImageList.Images.Add(Image.FromFile("attention.jpg"));
    myImageList.Images.Add(Image.FromFile("sandglass.jpg"));
    myImageList.Images.Add(Image.FromFile("11.JPG"));
    myImageList.Images.Add(Image.FromFile("checkGif.jpg"));

    treeView1.ImageList = myImageList;

Буду признателен за любую оказанную помощь. Спасибо


person artsince    schedule 22.03.2010    source источник


Ответы (1)


Если вы выберете «Открыть с помощью», ваше приложение, вероятно, откроется как работающее в той же папке, что и файл, который вы хотите открыть. То есть путь выполнения вашего приложения отличается от пути, по которому находится исполняемый файл.

Таким образом, ваш файл attention.jpg ищется относительно этого пути, а не пути приложения.

Чтобы исправить это, используйте:

string appPath = Application.StartupPath;
myImageList.Images.Add(Image.FromFile(Path.Combine(appPath, "attention.jpg")));

Другой, возможно, лучшей альтернативой было бы использование встроенных ресурсов через My.Resource вместо того, чтобы полагаться на отдельные файлы ресурсов.

person Konrad Rudolph    schedule 22.03.2010
comment
Вы не имеете в виду Application.StartupPath()? - person Jason Williams; 22.03.2010
comment
Большое спасибо. Я использовал Application.StartupPath. В любом случае, ваш ответ именно то, что мне нужно! - person artsince; 22.03.2010
comment
@Jason: тоже работает. Есть несколько способов получить путь к приложению. Но правда, мой отстой… Я думал, что это ВБ. - person Konrad Rudolph; 22.03.2010