Browse Source

Make WinSCP default handler command opens Set Program Associations for WinSCP even on Windows 10

Source commit: efd7b7dfa674bd328b01387573f7b1d18a0563b5
Martin Prikryl 9 years ago
parent
commit
ae089eeacf
1 changed files with 14 additions and 1 deletions
  1. 14 1
      source/windows/Setup.cpp

+ 14 - 1
source/windows/Setup.cpp

@@ -669,7 +669,20 @@ void __fastcall LaunchAdvancedAssociationUI()
 
   if (IsWin10())
   {
-    ExecuteShell(L"control.exe", L"/name Microsoft.DefaultPrograms /page pageDefaultProgram");
+    // WORKAROUND: On Windows 10, the IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI does not work.
+    // http://stackoverflow.com/q/32178986/850848
+    // This approach (IOpenControlPanel::Open) works on Windows 7 too, but not on Windows Vista.
+    IOpenControlPanel * OpenControlPanel;
+
+    HRESULT Result =
+      CoCreateInstance(CLSID_OpenControlPanel,
+        NULL, CLSCTX_INPROC, __uuidof(IOpenControlPanel), (void**)&OpenControlPanel);
+    if (SUCCEEDED(Result))
+    {
+      UnicodeString Page = FORMAT(L"pageDefaultProgram\\pageAdvancedSettings?pszAppName=%s", (AppNameString()));
+      OpenControlPanel->Open(L"Microsoft.DefaultPrograms", Page.c_str(), NULL);
+      OpenControlPanel->Release();
+    }
   }
   else
   {