Подтвердить что ты не робот

Путь к встроенному файлу ресурсов

У меня есть значок в файле ресурсов, который я хочу ссылаться.

Это код, который нуждается в этом пути к файлу значка:

IWshRuntimeLibrary.IWshShortcut MyShortcut  ;
MyShortcut =   (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\PerfectUpload.lnk");
MyShortcut.IconLocation = //path to icons path . Works if set to @"c:/icon.ico" 

Вместо того, чтобы иметь внешний файл значка, я хочу, чтобы он нашел встроенный файл значка. Что-то вроде

MyShortcut.IconLocation  = Path.GetFullPath(global::perfectupload.Properties.Resources.finish_perfect1.ToString()) ;

Это возможно? если да, то как?

Спасибо

4b9b3361

Ответ 1

Я думаю, это поможет вам в чем-то...

//Get the assembly.
System.Reflection.Assembly CurrAssembly = System.Reflection.Assembly.LoadFrom(System.Windows.Forms.Application.ExecutablePath);

//Gets the image from Images Folder.
System.IO.Stream stream = CurrAssembly.GetManifestResourceStream("ImageURL");

if (null != stream)
{
    //Fetch image from stream.
    MyShortcut.IconLocation = System.Drawing.Image.FromStream(stream);
}

Ответ 2

Я думаю, что это должно сработать, но я точно не помню (не для проверки двойной проверки).

MyShortcut.IconLocation = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.IconFilename.ico");

Ответ 3

Просто расширяя ответ SharpUrBrain, который не работал у меня, а не:

if (null != stream)
{
    //Fetch image from stream.
    MyShortcut.IconLocation = System.Drawing.Image.FromStream(stream);
}

Это должно быть что-то вроде:

if (null != stream)
{
    string temp = Path.GetTempFileName();
    System.Drawing.Image.FromStream(stream).Save(temp);
    shortcut.IconLocation = temp;
}

Ответ 4

Ресурс, в который он встроен, поэтому инкапсулирован в сборку DLL. Таким образом, вы не можете получить свой реальный путь, вы должны изменить свой подход.

Вероятно, вы захотите загрузить ресурс в память и записать его во временный файл, а затем связать его с ним. После изменения значка в файле назначения вы можете сами удалить файл значка.

Ответ 6

В WPF я сделал это раньше:

Uri TweetyUri = new Uri(@"/Resources/MyIco.ico", UriKind.Relative);
System.IO.Stream IconStream = Application.GetResourceStream(TweetyUri).Stream;
NotifyIcon.Icon = new System.Drawing.Icon(IconStream);