1
- // Copyright (C) Microsoft Corporation. All rights reserved.
2
- // Use of this source code is governed by a BSD-style license that can be
3
- // found in the LICENSE file.
4
-
5
- #include " stdafx.h"
6
-
7
- #include < algorithm>
8
- #include < pathcch.h>
9
- #include < Psapi.h>
10
-
11
- #include " AppStartPage.h"
12
- #include " AppWindow.h"
13
- #include " CheckFailure.h"
14
-
15
- using namespace Microsoft ::WRL;
16
-
17
- namespace AppStartPage
18
- {
19
-
20
- bool AreFileUrisEqual (std::wstring leftUri, std::wstring rightUri)
21
- {
22
- // Have to to lower due to current bug
23
- std::transform (leftUri.begin (), leftUri.end (),
24
- leftUri.begin (), ::tolower);
25
- std::transform (rightUri.begin (), rightUri.end (),
26
- rightUri.begin (), ::tolower);
27
-
28
- return leftUri == rightUri;
29
- }
30
-
31
- std::wstring ResolvePathAndTrimFile (std::wstring path)
32
- {
33
- wchar_t resultPath[MAX_PATH];
34
- PathCchCanonicalize (resultPath, ARRAYSIZE (resultPath), path.c_str ());
35
- PathCchRemoveFileSpec (resultPath, ARRAYSIZE (resultPath));
36
- return resultPath;
37
- }
38
-
39
- std::wstring GetSdkBuild ()
40
- {
41
- auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
42
- wil::unique_cotaskmem_string targetVersion;
43
- CHECK_FAILURE (options->get_TargetCompatibleBrowserVersion (&targetVersion));
44
-
45
- // The full version string A.B.C.D
46
- const wchar_t * targetVersionMajorAndRest = targetVersion.get ();
47
- // Should now be .B.C.D
48
- const wchar_t * targetVersionMinorAndRest = wcschr (targetVersionMajorAndRest, L' .' );
49
- CHECK_FAILURE ((targetVersionMinorAndRest != nullptr && *targetVersionMinorAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
50
-
51
- // Should now be .C.D
52
- const wchar_t * targetVersionBuildAndRest = wcschr (targetVersionMinorAndRest + 1 , L' .' );
53
- CHECK_FAILURE ((targetVersionBuildAndRest != nullptr && *targetVersionBuildAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
54
-
55
- // Return + 1 to skip the first . so just C.D
56
- return targetVersionBuildAndRest + 1 ;
57
- }
58
-
59
- std::wstring GetRuntimeVersion (AppWindow* appWindow)
60
- {
61
- wil::com_ptr<ICoreWebView2Environment> environment = appWindow->GetWebViewEnvironment ();
62
- wil::unique_cotaskmem_string runtimeVersion;
63
- CHECK_FAILURE (environment->get_BrowserVersionString (&runtimeVersion));
64
-
65
- return runtimeVersion.get ();
66
- }
67
-
68
- std::wstring GetAppPath ()
69
- {
70
- wchar_t appPath[MAX_PATH];
71
- GetModuleFileName (nullptr , appPath, ARRAYSIZE (appPath));
72
- return ResolvePathAndTrimFile (appPath);
73
- }
74
-
75
- std::wstring GetRuntimePath (AppWindow* appWindow)
76
- {
77
- wil::com_ptr<ICoreWebView2> webview = appWindow->GetWebView ();
78
- UINT32 browserProcessId = 0 ;
79
- wchar_t runtimePath[MAX_PATH];
80
- CHECK_FAILURE (webview->get_BrowserProcessId (&browserProcessId));
81
-
82
- HANDLE processHandle = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE , browserProcessId);
83
- CHECK_FAILURE (processHandle == nullptr ? E_FAIL : S_OK);
84
- GetModuleFileNameEx (processHandle, nullptr , runtimePath, ARRAYSIZE (runtimePath));
85
- CloseHandle (processHandle);
86
-
87
- return ResolvePathAndTrimFile (runtimePath);
88
- }
89
-
90
- std::wstring GetUri (AppWindow* appWindow)
91
- {
92
- std::wstring uri = appWindow->GetLocalUri (L" AppStartPage.html" );
93
-
94
- uri += L" ?sdkBuild=" ;
95
- uri += GetSdkBuild ();
96
-
97
- uri += L" &runtimeVersion=" ;
98
- uri += GetRuntimeVersion (appWindow);
99
-
100
- uri += L" &appPath=" ;
101
- uri += GetAppPath ();
102
-
103
- uri += L" &runtimePath=" ;
104
- uri += GetRuntimePath (appWindow);
105
-
106
- return uri;
107
- }
108
-
1
+ // Copyright (C) Microsoft Corporation. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #include " stdafx.h"
6
+
7
+ #include < algorithm>
8
+ #include < pathcch.h>
9
+ #include < Psapi.h>
10
+
11
+ #include " AppStartPage.h"
12
+ #include " AppWindow.h"
13
+ #include " CheckFailure.h"
14
+
15
+ using namespace Microsoft ::WRL;
16
+
17
+ namespace AppStartPage
18
+ {
19
+
20
+ bool AreFileUrisEqual (std::wstring leftUri, std::wstring rightUri)
21
+ {
22
+ // Have to to lower due to current bug
23
+ std::transform (leftUri.begin (), leftUri.end (),
24
+ leftUri.begin (), ::tolower);
25
+ std::transform (rightUri.begin (), rightUri.end (),
26
+ rightUri.begin (), ::tolower);
27
+
28
+ return leftUri == rightUri;
29
+ }
30
+
31
+ std::wstring ResolvePathAndTrimFile (std::wstring path)
32
+ {
33
+ wchar_t resultPath[MAX_PATH];
34
+ PathCchCanonicalize (resultPath, ARRAYSIZE (resultPath), path.c_str ());
35
+ PathCchRemoveFileSpec (resultPath, ARRAYSIZE (resultPath));
36
+ return resultPath;
37
+ }
38
+
39
+ std::wstring GetSdkBuild ()
40
+ {
41
+ auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
42
+ wil::unique_cotaskmem_string targetVersion;
43
+ CHECK_FAILURE (options->get_TargetCompatibleBrowserVersion (&targetVersion));
44
+
45
+ // The full version string A.B.C.D
46
+ const wchar_t * targetVersionMajorAndRest = targetVersion.get ();
47
+ // Should now be .B.C.D
48
+ const wchar_t * targetVersionMinorAndRest = wcschr (targetVersionMajorAndRest, L' .' );
49
+ CHECK_FAILURE ((targetVersionMinorAndRest != nullptr && *targetVersionMinorAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
50
+
51
+ // Should now be .C.D
52
+ const wchar_t * targetVersionBuildAndRest = wcschr (targetVersionMinorAndRest + 1 , L' .' );
53
+ CHECK_FAILURE ((targetVersionBuildAndRest != nullptr && *targetVersionBuildAndRest == L' .' ) ? S_OK : E_UNEXPECTED);
54
+
55
+ // Return + 1 to skip the first . so just C.D
56
+ return targetVersionBuildAndRest + 1 ;
57
+ }
58
+
59
+ std::wstring GetRuntimeVersion (AppWindow* appWindow)
60
+ {
61
+ wil::com_ptr<ICoreWebView2Environment> environment = appWindow->GetWebViewEnvironment ();
62
+ wil::unique_cotaskmem_string runtimeVersion;
63
+ CHECK_FAILURE (environment->get_BrowserVersionString (&runtimeVersion));
64
+
65
+ return runtimeVersion.get ();
66
+ }
67
+
68
+ std::wstring GetAppPath ()
69
+ {
70
+ wchar_t appPath[MAX_PATH];
71
+ GetModuleFileName (nullptr , appPath, ARRAYSIZE (appPath));
72
+ return ResolvePathAndTrimFile (appPath);
73
+ }
74
+
75
+ std::wstring GetRuntimePath (AppWindow* appWindow)
76
+ {
77
+ wil::com_ptr<ICoreWebView2> webview = appWindow->GetWebView ();
78
+ UINT32 browserProcessId = 0 ;
79
+ wchar_t runtimePath[MAX_PATH];
80
+ CHECK_FAILURE (webview->get_BrowserProcessId (&browserProcessId));
81
+
82
+ HANDLE processHandle = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE , browserProcessId);
83
+ CHECK_FAILURE (processHandle == nullptr ? E_FAIL : S_OK);
84
+ GetModuleFileNameEx (processHandle, nullptr , runtimePath, ARRAYSIZE (runtimePath));
85
+ CloseHandle (processHandle);
86
+
87
+ return ResolvePathAndTrimFile (runtimePath);
88
+ }
89
+
90
+ std::wstring GetUri (AppWindow* appWindow)
91
+ {
92
+ std::wstring uri = appWindow->GetLocalUri (L" AppStartPage.html" );
93
+
94
+ uri += L" ?sdkBuild=" ;
95
+ uri += GetSdkBuild ();
96
+
97
+ uri += L" &runtimeVersion=" ;
98
+ uri += GetRuntimeVersion (appWindow);
99
+
100
+ uri += L" &appPath=" ;
101
+ uri += GetAppPath ();
102
+
103
+ uri += L" &runtimePath=" ;
104
+ uri += GetRuntimePath (appWindow);
105
+
106
+ return uri;
107
+ }
108
+
109
109
}; // namespace AppStartPage
0 commit comments