Crea un collegamento con un carattere Unicode

Sto usando IWshRuntimeLibrary per creare un collegamento con c #. il nome del file di scelta rapida è in hindi “नमस्ते”.

Sto usando il codice seguente il mio snip per creare un collegamento, dove shortcutName = "नमस्ते.lnk"

  WshShellClass wshShell = new WshShellClass(); IWshRuntimeLibrary.IWshShortcut shortcut; shortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(destPath + "\\" + shortcutName); shortcut.TargetPath = sourcePath; shortcut.Save(); 

su shortcut.Save() Ricevo un’eccezione successiva.

 The filename, directory name, or volume label syntax is incorrect. (Exception from HRESULT: 0x8007007B) 

Puoi dire cosa non va nel debugger. Ispeziona “scorciatoia” nel debugger e nota che il tuo nome in hindi è stato sostituito da punti interrogativi. Che produce un nome file non valido e triggers l’eccezione.

Stai utilizzando una libreria di supporto scripting antica che non è in grado di gestire la stringa. Avrai bisogno di usare qualcosa di più aggiornato. Progetto + Aggiungi riferimento, scheda Sfoglia e seleziona c: \ windows \ system32 \ shell32.dll. Questo aggiunge lo spazio dei nomi Shell32 al tuo progetto con poche interfacce per fare il lavoro relativo alla shell. Quanto basta per farlo funzionare, l’interfaccia ShellLinkObject consente di modificare le proprietà di un file .lnk. È necessario un trucco, non ha la possibilità di creare un nuovo file .lnk da zero. Lo risolvi creando un file .lnk vuoto. Questo ha funzionato bene:

  string destPath = @"c:\temp"; string shortcutName = @"नमस्ते.lnk"; // Create empty .lnk file string path = System.IO.Path.Combine(destPath, shortcutName); System.IO.File.WriteAllBytes(path, new byte[0]); // Create a ShellLinkObject that references the .lnk file Shell32.Shell shl = new Shell32.Shell(); Shell32.Folder dir = shl.NameSpace(destPath); Shell32.FolderItem itm = dir.Items().Item(shortcutName); Shell32.ShellLinkObject lnk = (Shell32.ShellLinkObject)itm.GetLink; // Set the .lnk file properties lnk.Path = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\notepad.exe"; lnk.Description = "nobugz was here"; lnk.Arguments = "sample.txt"; lnk.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); lnk.Save(path);