".abc"파일을 내 WPF 응용 프로그램에 연결하려고합니다.WPF 응용 프로그램 파일 연결 : DefaultIcon이 작동하지 않습니다.
은이 코드를 사용하여 연결을 추가
public class FileAssociation
{
static RegistryKey Root
{
get
{
return Registry.CurrentUser;
}
}
// Associate file extension with progID, description, icon and application
public static void Associate(string extension,
string progID, string description, string application)
{
Require.NotNullOrEmpty(extension, "extension");
Require.NotNullOrEmpty(progID, "progID");
Require.NotNullOrEmpty(application, "application");
Require.NotNullOrEmpty(description, "description");
Root.CreateSubKey(extension).SetValue("", progID);
using (var key = Root.CreateSubKey(progID))
{
key.SetValue("", description);
key.CreateSubKey("DefaultIcon").SetValue("", ToShortPathName(application).Quote() + ",0");
key.CreateSubKey(@"Shell\Open\Command").SetValue("", ToShortPathName(application).Quote() + " \"%1\"");
// Tell explorer the file association has been changed
SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
}
}
// Return true if extension already associated in registry
public static bool IsAssociated(string extension)
{
return (Root.OpenSubKey(extension, false) != null);
}
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
[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();
}
}
참고 : 견적() 확장 방법은 "ABC"에 문자열 abc 방송을 만들기 위해 단지 사용된다.
이제 파일 연결이 정상적으로 작동합니다. 내 WPF 응용 프로그램을 열려면 ".abc"파일을 두 번 클릭하면됩니다.
그러나 DefaultIcon이 작동하지 않습니다.. DefaultIcon Registery 키는 "D:\path\to\MyWPFApp.exe",0
으로 설정됩니다. 내 WPF 응용 프로그램의 응용 프로그램 아이콘이 속성 페이지의 아이콘으로 설정되어 있습니다 (MyWPFApp.exe의 아이콘이 이미 변경되었음을 알 수 있습니다). 뭐가 문제 야? 감사! BTW
: 나는 윈도우 8
감사합니다. 나중에 답변을 찾았지만 여기에서 업데이트하는 것을 잊었습니다. 맞습니다. 문제는 Root 속성의 반환 값입니다. 제 경우에는 HKEY_CURRENT_USER가 아니라 HKEY_CURRENT_USER/Software/Classes 여야합니다 : p –