2011-02-04 46 views
76

.NET Framework 3.5を使用し、公式のWindows APIを使用して、デスクトップ上のEXEファイルを示すショートカットを作成したいとします。どうやってやるの?デスクトップにショートカットを作成するC#

+0

Rustam IrzaevのWindowsスクリプトホストオブジェクトモデルを使用することは、適切なショートカットのための唯一の信頼できる方法です。 ayush:この手法では、ホットキーや説明などの機能が欠けています。 Thorarin:ShellLinkはほとんどの場合うまく機能しますが、特にWindows XPでは機能しないため、無効なショートカットが作成されます。 Simon Mourier:これは非常に有望ですが、Windows 8では無効なショートカットが作成されます。 – BrutalDev

答えて

66

URLショートカット

private void urlShortcutToDesktop(string linkName, string linkUrl) 
{ 
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url")) 
    { 
     writer.WriteLine("[InternetShortcut]"); 
     writer.WriteLine("URL=" + linkUrl); 
     writer.Flush(); 
    } 
} 

アプリケーションのショートカットも

private void appShortcutToDesktop(string linkName) 
{ 
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url")) 
    { 
     string app = System.Reflection.Assembly.GetExecutingAssembly().Location; 
     writer.WriteLine("[InternetShortcut]"); 
     writer.WriteLine("URL=file:///" + app); 
     writer.WriteLine("IconIndex=0"); 
     string icon = app.Replace('\\', '/'); 
     writer.WriteLine("IconFile=" + icon); 
     writer.Flush(); 
    } 
} 

これら

example 1 example2

をチェック

いくつかのAPI固有の機能を使用する場合は、IShellLink interfaceを とし、IPersistFile interface(COM相互運用機能を使用)とします。

Here is an article that goes into detail what you need to do it, as well as sample code:

+0

これらは上手く動作しています。しかし、私はDllImport( "coredll.dll")のようないくつかのAPI関数を使ってショートカットを作成したい。 public static extern int SHCreateShortcut(StringBuilder szShortcut、StringBuilder szTarget); –

+0

@Vipinなぜですか?上記の解決策のいずれかが十分でない理由がありますか? – alex

+1

愚かなユーザーはそれを変更することができます –

20

あなたはショートカットを作成するには、このShellLink.csクラスを使用することができます。

デスクトップディレクトリ、使用取得するには:

var dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 

またはすべてのユーザーのためにそれを作成するためにEnvironment.SpecialFolder.CommonDesktopDirectoryを使用します。なホットキーなどの追加オプションで

+0

ありがとう!それは素晴らしい仕事です。 –

+6

@Vipin:解決策があなたのために働くならば、それをupvoteするのが普通です。また、最良のソリューションを選択し、問題の答えとしてそれを受け入れる必要があります。 – Thorarin

+0

ShellLink.csはWindows XPでは機能しません。 – BrutalDev

84

、説明など

まず、プロジェクト>は参考> COM > Windowsスクリプトホストオブジェクトモデルを追加します。

using IWshRuntimeLibrary; 

private void CreateShortcut() 
{ 
    object shDesktop = (object)"Desktop"; 
    WshShell shell = new WshShell(); 
    string shortcutAddress = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\Notepad.lnk"; 
    IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress); 
    shortcut.Description = "New shortcut for a Notepad"; 
    shortcut.Hotkey = "Ctrl+Shift+N"; 
    shortcut.TargetPath = Environment.GetFolderPath(Environment.SpecialFolders.System) + @"\notepad.exe"; 
    shortcut.Save(); 
} 
+0

これは私のためにうまくいきました。 – tofutim

+1

これは本当に私にとっては近いです。ショートカットの "WorkingDirectory"プロパティに.exeのディレクトリを追加する必要がありました。 (ショートカット.WorkingDirectory)+1 – samuelesque

+1

IconLocationのアイコンインデックスを指定するには、 "path_to_icon_file、#"のような値を使用します。ここで、#はアイコンインデックスです。引き数としてhttps://msdn.microsoft.com/en-us/library/xsy6k3ys(v=vs.84).aspx – Chris

8

ShellLink.csをvbAcceleratorで使用すると、簡単にショートカットを作成できます。追加の参照なし

private static void AddShortCut() 
{ 
using (ShellLink shortcut = new ShellLink()) 
{ 
    shortcut.Target = Application.ExecutablePath; 
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); 
    shortcut.Description = "My Shorcut"; 
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal; 
    shortcut.Save(SHORTCUT_FILEPATH); 
} 
} 
+1

そのリンクは現在死んでいますが、アーカイブされたバージョン[here](https://web.archive.org/web/20150414052035/http://www.vbaccelerator.com/home/NET/Code/)が見つかります。ライブラリ/ Shell_Projects/Creating_and_Modifying_Shortcuts/article.asp)。 –

10

using System; 
using System.Runtime.InteropServices; 

public class Shortcut 
{ 

private static Type m_type = Type.GetTypeFromProgID("WScript.Shell"); 
private static object m_shell = Activator.CreateInstance(m_type); 

[ComImport, TypeLibType((short)0x1040), Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")] 
private interface IWshShortcut 
{ 
    [DispId(0)] 
    string FullName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0)] get; } 
    [DispId(0x3e8)] 
    string Arguments { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] set; } 
    [DispId(0x3e9)] 
    string Description { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] set; } 
    [DispId(0x3ea)] 
    string Hotkey { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] set; } 
    [DispId(0x3eb)] 
    string IconLocation { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] set; } 
    [DispId(0x3ec)] 
    string RelativePath { [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ec)] set; } 
    [DispId(0x3ed)] 
    string TargetPath { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] set; } 
    [DispId(0x3ee)] 
    int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; } 
    [DispId(0x3ef)] 
    string WorkingDirectory { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] set; } 
    [TypeLibFunc((short)0x40), DispId(0x7d0)] 
    void Load([In, MarshalAs(UnmanagedType.BStr)] string PathLink); 
    [DispId(0x7d1)] 
    void Save(); 
} 

public static void Create(string fileName, string targetPath, string arguments, string workingDirectory, string description, string hotkey, string iconPath) 
{ 
    IWshShortcut shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { fileName }); 
    shortcut.Description = description; 
    shortcut.Hotkey = hotkey; 
    shortcut.TargetPath = targetPath; 
    shortcut.WorkingDirectory = workingDirectory; 
    shortcut.Arguments = arguments; 
    if (!string.IsNullOrEmpty(iconPath)) 
     shortcut.IconLocation = iconPath; 
    shortcut.Save(); 
} 
} 

デスクトップにショートカットを作成する:ここ

string lnkFileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Notepad.lnk"); 
    Shortcut.Create(lnkFileName, 
     System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "notepad.exe"), 
     null, null, "Open Notepad", "Ctrl+Shift+N", null); 
33

外部COMオブジェクト(WSH)に依存しませんコードの一部であり、 32ビットおよび64ビットプログラムをサポートしています。

using System; 
using System.IO; 
using System.Runtime.InteropServices; 
using System.Runtime.InteropServices.ComTypes; 
using System.Text; 

namespace TestShortcut 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IShellLink link = (IShellLink)new ShellLink(); 

      // setup shortcut information 
      link.SetDescription("My Description"); 
      link.SetPath(@"c:\MyPath\MyProgram.exe"); 

      // save it 
      IPersistFile file = (IPersistFile)link; 
      string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
      file.Save(Path.Combine(desktopPath, "MyLink.lnk"), false); 
     } 
    } 

    [ComImport] 
    [Guid("00021401-0000-0000-C000-000000000046")] 
    internal class ShellLink 
    { 
    } 

    [ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    [Guid("000214F9-0000-0000-C000-000000000046")] 
    internal interface IShellLink 
    { 
     void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags); 
     void GetIDList(out IntPtr ppidl); 
     void SetIDList(IntPtr pidl); 
     void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); 
     void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); 
     void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); 
     void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); 
     void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); 
     void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); 
     void GetHotkey(out short pwHotkey); 
     void SetHotkey(short wHotkey); 
     void GetShowCmd(out int piShowCmd); 
     void SetShowCmd(int iShowCmd); 
     void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); 
     void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); 
     void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); 
     void Resolve(IntPtr hwnd, int fFlags); 
     void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); 
    } 
} 
+0

このテクニックはWindows 8では動作しません。 – BrutalDev

+0

@BrutalDev - 何が動作しませんか?私はWindows 8 x64でそれをテストして、動作します。 –

+0

また、Win8 x64を実行し、上記のコードサンプルをそのままコピーし、デスクトップ上にパスなしのアイコンを作成します。リンクを実行すると、エクスプローラがデスクトップに表示されます。これはShellLink.csと同様の問題ですが、Windows XP/2003では同様の問題です。すべてのWindowsバージョンで確実に動作する唯一の例は、Rustam IrzaevがWSHOMを使用していたことです。主な質問に「私は非常に有望ですが、Windows 8に無効なショートカットを作成します」 – BrutalDev

5

EDIT:このソリューションはもうお勧めしません。それでもWindowsスクリプティングエンジンを使用するよりも優れた方法がない場合は、メモリにプレーンテキストスクリプトを作成するのではなく、エンジンを直接呼び出す@ Mehmetのソリューションを使用してください。

VBScriptを使用してショートカットを生成しました。 p/Invoke、COM Interop、および追加のDLLは必要ありません。スクリプトが一時的に削除します

  • を終了するのを

    • このVBScriptのCreateShortcut C#メソッド
    • 保存の指定されたパラメータを使用して実行時にVBScriptを生成し、一時ファイルに
    • 待ち:それはこのように動作しますここに行く

    ファイル:

    static string _scriptTempFilename; 
    
    /// <summary> 
    /// Creates a shortcut at the specified path with the given target and 
    /// arguments. 
    /// </summary> 
    /// <param name="path">The path where the shortcut will be created. This should 
    ///  be a file with the LNK extension.</param> 
    /// <param name="target">The target of the shortcut, e.g. the program or file 
    ///  or folder which will be opened.</param> 
    /// <param name="arguments">The additional command line arguments passed to the 
    ///  target.</param> 
    public static void CreateShortcut(string path, string target, string arguments) 
    { 
        // Check if link path ends with LNK or URL 
        string extension = Path.GetExtension(path).ToUpper(); 
        if (extension != ".LNK" && extension != ".URL") 
        { 
         throw new ArgumentException("The path of the shortcut must have the extension .lnk or .url."); 
        } 
    
        // Get temporary file name with correct extension 
        _scriptTempFilename = Path.GetTempFileName(); 
        File.Move(_scriptTempFilename, _scriptTempFilename += ".vbs"); 
    
        // Generate script and write it in the temporary file 
        File.WriteAllText(_scriptTempFilename, String.Format(@"Dim WSHShell 
    Set WSHShell = WScript.CreateObject({0}WScript.Shell{0}) 
    Dim Shortcut 
    Set Shortcut = WSHShell.CreateShortcut({0}{1}{0}) 
    Shortcut.TargetPath = {0}{2}{0} 
    Shortcut.WorkingDirectory = {0}{3}{0} 
    Shortcut.Arguments = {0}{4}{0} 
    Shortcut.Save", 
         "\"", path, target, Path.GetDirectoryName(target), arguments), 
         Encoding.Unicode); 
    
        // Run the script and delete it after it has finished 
        Process process = new Process(); 
        process.StartInfo.FileName = _scriptTempFilename; 
        process.Start(); 
        process.WaitForExit(); 
        File.Delete(_scriptTempFilename); 
    } 
    
  • 2

    "Windows Script Host Object Model"リファレンスを使用してショートカットを作成します。

    Adding "Windows Script Host Object Model" to project references

    と特定の場所にショートカットを作成するには:

    void CreateShortcut(string linkPath, string filename) 
        { 
         // Create shortcut dir if not exists 
         if (!Directory.Exists(linkPath)) 
          Directory.CreateDirectory(linkPath); 
    
         // shortcut file name 
         string linkName = Path.ChangeExtension(Path.GetFileName(filename), ".lnk"); 
    
         // COM object instance/props 
         IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell(); 
         IWshRuntimeLibrary.IWshShortcut sc = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(linkName); 
         sc.Description = "some desc"; 
         //shortcut.IconLocation = @"C:\..."; 
         sc.TargetPath = linkPath; 
         // save shortcut to target 
         sc.Save(); 
        } 
    
    4

    ここに私のコードです:

    私は私のアプリのために単に使用
    public static class ShortcutHelper 
    { 
        #region Constants 
        /// <summary> 
        /// Default shortcut extension 
        /// </summary> 
        public const string DEFAULT_SHORTCUT_EXTENSION = ".lnk"; 
    
        private const string WSCRIPT_SHELL_NAME = "WScript.Shell"; 
        #endregion 
    
        /// <summary> 
        /// Create shortcut in current path. 
        /// </summary> 
        /// <param name="linkFileName">shortcut name(include .lnk extension.)</param> 
        /// <param name="targetPath">target path</param> 
        /// <param name="workingDirectory">working path</param> 
        /// <param name="arguments">arguments</param> 
        /// <param name="hotkey">hot key(ex: Ctrl+Shift+Alt+A)</param> 
        /// <param name="shortcutWindowStyle">window style</param> 
        /// <param name="description">shortcut description</param> 
        /// <param name="iconNumber">icon index(start of 0)</param> 
        /// <returns>shortcut file path.</returns> 
        /// <exception cref="System.IO.FileNotFoundException"></exception> 
        public static string CreateShortcut(
         string linkFileName, 
         string targetPath, 
         string workingDirectory = "", 
         string arguments = "", 
         string hotkey = "", 
         ShortcutWindowStyles shortcutWindowStyle = ShortcutWindowStyles.WshNormalFocus, 
         string description = "", 
         int iconNumber = 0) 
        { 
         if (linkFileName.Contains(DEFAULT_SHORTCUT_EXTENSION) == false) 
         { 
          linkFileName = string.Format("{0}{1}", linkFileName, DEFAULT_SHORTCUT_EXTENSION); 
         } 
    
         if (File.Exists(targetPath) == false) 
         { 
          throw new FileNotFoundException(targetPath); 
         } 
    
         if (workingDirectory == string.Empty) 
         { 
          workingDirectory = Path.GetDirectoryName(targetPath); 
         } 
    
         string iconLocation = string.Format("{0},{1}", targetPath, iconNumber); 
    
         if (Environment.Version.Major >= 4) 
         { 
          Type shellType = Type.GetTypeFromProgID(WSCRIPT_SHELL_NAME); 
          dynamic shell = Activator.CreateInstance(shellType); 
          dynamic shortcut = shell.CreateShortcut(linkFileName); 
    
          shortcut.TargetPath = targetPath; 
          shortcut.WorkingDirectory = workingDirectory; 
          shortcut.Arguments = arguments; 
          shortcut.Hotkey = hotkey; 
          shortcut.WindowStyle = shortcutWindowStyle; 
          shortcut.Description = description; 
          shortcut.IconLocation = iconLocation; 
    
          shortcut.Save(); 
         } 
         else 
         { 
          Type shellType = Type.GetTypeFromProgID(WSCRIPT_SHELL_NAME); 
          object shell = Activator.CreateInstance(shellType); 
          object shortcut = shellType.InvokeMethod("CreateShortcut", shell, linkFileName); 
          Type shortcutType = shortcut.GetType(); 
    
          shortcutType.InvokeSetMember("TargetPath", shortcut, targetPath); 
          shortcutType.InvokeSetMember("WorkingDirectory", shortcut, workingDirectory); 
          shortcutType.InvokeSetMember("Arguments", shortcut, arguments); 
          shortcutType.InvokeSetMember("Hotkey", shortcut, hotkey); 
          shortcutType.InvokeSetMember("WindowStyle", shortcut, shortcutWindowStyle); 
          shortcutType.InvokeSetMember("Description", shortcut, description); 
          shortcutType.InvokeSetMember("IconLocation", shortcut, iconLocation); 
    
          shortcutType.InvokeMethod("Save", shortcut); 
         } 
    
         return Path.Combine(System.Windows.Forms.Application.StartupPath, linkFileName); 
        } 
    
        private static object InvokeSetMember(this Type type, string methodName, object targetInstance, params object[] arguments) 
        { 
         return type.InvokeMember(
          methodName, 
          BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty, 
          null, 
          targetInstance, 
          arguments); 
        } 
    
        private static object InvokeMethod(this Type type, string methodName, object targetInstance, params object[] arguments) 
        { 
         return type.InvokeMember(
          methodName, 
          BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, 
          null, 
          targetInstance, 
          arguments); 
        } 
    
        /// <summary> 
        /// windows styles 
        /// </summary> 
        public enum ShortcutWindowStyles 
        { 
         /// <summary> 
         /// Hide 
         /// </summary> 
         WshHide = 0, 
         /// <summary> 
         /// NormalFocus 
         /// </summary> 
         WshNormalFocus = 1, 
         /// <summary> 
         /// MinimizedFocus 
         /// </summary> 
         WshMinimizedFocus = 2, 
         /// <summary> 
         /// MaximizedFocus 
         /// </summary> 
         WshMaximizedFocus = 3, 
         /// <summary> 
         /// NormalNoFocus 
         /// </summary> 
         WshNormalNoFocus = 4, 
         /// <summary> 
         /// MinimizedNoFocus 
         /// </summary> 
         WshMinimizedNoFocus = 6, 
        } 
    } 
    
    8

    using IWshRuntimeLibrary; // > Ref > COM > Windows Script Host Object 
    ... 
    private static void CreateShortcut() 
        { 
         string link = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
          + Path.DirectorySeparatorChar + Application.ProductName + ".lnk"; 
         var shell = new WshShell(); 
         var shortcut = shell.CreateShortcut(link) as IWshShortcut; 
         shortcut.TargetPath = Application.ExecutablePath; 
         shortcut.WorkingDirectory = Application.StartupPath; 
         //shortcut... 
         shortcut.Save(); 
        } 
    
    +0

    -paste it – rluks

    1

    彼女eは(テスト済みの)拡張メソッドであり、あなたを助けるコメントがあります。

    using IWshRuntimeLibrary; 
    using System; 
    
    namespace Extensions 
    { 
        public static class XShortCut 
        { 
         /// <summary> 
         /// Creates a shortcut in the startup folder from a exe as found in the current directory. 
         /// </summary> 
         /// <param name="exeName">The exe name e.g. test.exe as found in the current directory</param> 
         /// <param name="startIn">The shortcut's "Start In" folder</param> 
         /// <param name="description">The shortcut's description</param> 
         /// <returns>The folder path where created</returns> 
         public static string CreateShortCutInStartUpFolder(string exeName, string startIn, string description) 
         { 
          var startupFolderPath = Environment.SpecialFolder.Startup.GetFolderPath(); 
          var linkPath = startupFolderPath + @"\" + exeName + "-Shortcut.lnk"; 
          var targetPath = Environment.CurrentDirectory + @"\" + exeName; 
          XFile.Delete(linkPath); 
          Create(linkPath, targetPath, startIn, description); 
          return startupFolderPath; 
         } 
    
         /// <summary> 
         /// Create a shortcut 
         /// </summary> 
         /// <param name="fullPathToLink">the full path to the shortcut to be created</param> 
         /// <param name="fullPathToTargetExe">the full path to the exe to 'really execute'</param> 
         /// <param name="startIn">Start in this folder</param> 
         /// <param name="description">Description for the link</param> 
         public static void Create(string fullPathToLink, string fullPathToTargetExe, string startIn, string description) 
         { 
          var shell = new WshShell(); 
          var link = (IWshShortcut)shell.CreateShortcut(fullPathToLink); 
          link.IconLocation = fullPathToTargetExe; 
          link.TargetPath = fullPathToTargetExe; 
          link.Description = description; 
          link.WorkingDirectory = startIn; 
          link.Save(); 
         } 
        } 
    } 
    

    と使用の例:

    XShortCut.CreateShortCutInStartUpFolder(THEEXENAME, 
        Environment.CurrentDirectory, 
        "Starts some executable in the current directory of application"); 
    

    第一PARM(現在のディレクトリにある)exeファイル名第二PARMがあるの設定「で起動し」フォルダと第三PARMは、ショートカットの説明です。

    Example of Using this code

    リンクの命名規則は、それが何をするかについて何ら曖昧さを残しません。リンクをテストするには、ダブルクリックしてください。

    最終ノート:アプリケーション自体(ターゲット)には、関連付けられたICONイメージが必要です。このリンクは、exe内のICONを簡単に見つけることができます。ターゲットアプリケーションに複数のアイコンがある場合は、リンクのプロパティを開いて、アイコンをexe内の他のアイコンに変更することができます。

    +0

    .GetFolderPath()が存在しないというエラーメッセージが表示されます。 XFile.Deleteでも同じです。私は何が欠けていますか? – RalphF

    +0

    ここでエラーが発生しますか? Environment.SpecialFolder.Startup.GetFolderPath(); –

    関連する問題