2016-10-21 4 views
0

Я использую следующий код для создания ярлыков для нескольких файлов и копирования их в папку автозагрузки. Программа работает на Windows XP и построена с использованием .net framework 2.0.C# create shortcut error

Создание ярлыка кода

try 
{ 
    object shDesktop = (object)"Desktop"; 
    WshShell shell = new WshShell(); 
    //Shorcut name 
    string shortcutAddress = @"C:\Documents and Settings\Astrophysics Inc\Start Menu\Programs\Startup\Shortcut to " + s + ".lnk"; 
    IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress); 
    shortcut.Description = "New shortcut for a Notepad"; 
    shortcut.Hotkey = "Ctrl+Shift+N"; 
    //File path 
    shortcut.TargetPath = @"C:\Program Files\" +path+ @"\" + s + ".exe"; 
    shortcut.Save(); 
} 
catch (Exception) { }; 

Так ошибка заключается в следующем: Если я запустить файл с помощью ярлыка, я могу видеть его в процессах, но я не могу иметь каких-либо показаний от него. Однако, если я перейду к свойствам и найду местоположение ярлыка (фактический файл) и откройте его из своей собственной папки, приложение работает. Я попытался создать тот же ярлык физически (не используя C#), и он работает по назначению.

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

+0

Это работает мной, хотя я не нахожусь на XP. Как он реагирует на набор свойств WorkDirectory? –

+0

Он отлично работает и на окнах 7. Кроме того, я не получаю никаких ошибок, создается ярлык, файл загружается, но не работает должным образом, когда запускается из этого конкретного ярлыка. Я попытаюсь установить свойство рабочего каталога и сообщить об этом. –

+0

@JedBurke добавляет рабочий каталог, исправил проблему! Благодаря! –

ответ

0

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

string DirectoryPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup); 
      string TargetPathName = Application.ExecutablePath; // Exe Directory here I have set it to my own application dir 
      string LinkPathName = "You Exe Name"; 

      // Get some file and directory information 
      DirectoryInfo SpecialDir=new DirectoryInfo(DirectoryPath); 
      // First get the filename for the original file and create a new file 
      // name for a link in the Startup directory 
      // 
      FileInfo OriginalFile = new FileInfo(LinkPathName); 
      string NewFileName = SpecialDir.FullName+"\\"+OriginalFile.Name+".lnk"; 
      FileInfo LinkFile = new FileInfo(NewFileName); 

      if (LinkFile.Exists) return; 

      try 
      { 
       // Create a shortcut in the special folder for the file 
       // Making use of the Windows Scripting Host 
       WshShell shell = new WshShell(); 
       IWshShortcut link = (IWshShortcut)shell.CreateShortcut(LinkFile.FullName); 
       link.TargetPath = TargetPathName; 
       link.Save(); 
      } 
      catch 
      { 
       MessageBox.Show("Unable to create link in directory: " + NewFileName, 
        "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      }