ファイル拡張子を特定の実行可能アプリケーションに関連付け、その値をレジスタに書き込む必要があるため、このチュートリアルを参照してください: チュートリアル
だから私はこのクラスを追加する新しいWpfアプリケーションを作成します:
public class FileAssociation
{
// Associate file extension with progID, description, icon and application
public static void Associate(string extension,
string progID, string description, string icon, string application)
{
Registry.ClassesRoot.CreateSubKey(extension).SetValue("", progID);
if (progID != null && progID.Length > 0)
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progID))
{
if (description != null)
key.SetValue("", description);
if (icon != null)
key.CreateSubKey("DefaultIcon").SetValue("", ToShortPathName(icon));
if (application != null)
key.CreateSubKey(@"Shell\Open\Command").SetValue("",
ToShortPathName(application) + " \"%1\"");
}
}
// Return true if extension already associated in registry
public static bool IsAssociated(string extension)
{
return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
}
[DllImport("Kernel32.dll")]
private static extern uint GetShortPathName(string lpszLongPath,
[Out] StringBuilder lpszShortPath, uint cchBuffer);
// Return short path format of a file name
private static string ToShortPathName(string longName)
{
StringBuilder s = new StringBuilder(1000);
uint iSize = (uint)s.Capacity;
uint iRet = GetShortPathName(longName, s, iSize);
return s.ToString();
}
}
次に、アイコン画像をプロジェクトのルートに追加し、このスニペットを配置しました:
if (!FileAssociation.IsAssociated(".akp"))
FileAssociation.Associate(".akp", "ClassID.ProgID", "akp File", "akeo.ico", @"C:\Users\Lamloumi\Desktop\MyWork\C#\App - SuiteTool\bin\x64\Debug\App - SuiteTool.exe");
しかし、この行で問題が発生しました
Registry.ClassesRoot.CreateSubKey(extension).SetValue("", progID);

だから私は知る必要があります
- 問題は何ですか、つまり、このコードが機能しなかった理由は何ですか?
- どうすれば修正できますか?
ありがとう、