2015-02-17 4 views
1

У меня есть приложение A, которое создает ярлык на рабочем столе, связанный с другим приложением B. Приложение B в начале должно проверить, нужно ли обновлять некоторые файлы и загружать их в приложение B , но если я открою его из ярлыка на рабочем столе, приложение B загрузит все обновленные файлы на рабочем столе. Я искал ответ, если есть способ сообщить созданную ссылку, чтобы не изменять контекст выполнения.Контекст выполнения .lnk, созданного на рабочем столе

код, который создают .lnk на рабочем столе заключается в следующем:

Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows Script Host Shell Object 
     dynamic shell = Activator.CreateInstance(t); 
     try 
     { 
      var lnk = shell.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)+"/"+string.Format("{0}.lnk", Name)); 
      try 
      { 
       lnk.TargetPath = Path; 
       lnk.IconLocation = Path+", 0"; 
       lnk.Save(); 
      } 
      finally 
      { 
       Marshal.FinalReleaseComObject(lnk); 
      } 
     } 
     finally 
     { 
      Marshal.FinalReleaseComObject(shell); 
     } 

ответ

0

Ссылка не проблема. Контекст выполнения всегда является текущим рабочим каталогом.

В вашей программе B вы должны указать папку B для записи. Вы можете получить текущий путь использования приложений, используя:

using System.Reflection; 

string path = Assembly.GetExecutingAssembly().Location; 

Это путь exe. Чтобы получить каталог, его можно обернуть:

using System.IO; 

string folder = Path.GetDirectoryName(path); 
+0

Спасибо! это работает нормально. Я пытался лучше раскрыть поведение ярлыка, но я думаю, что это лучший способ решить эту проблему. Ура! – DeadVi5