@joebigelow / wix / commits / 3f8e3522

Update splash screen to be per-monitor DPI aware.

Remove GDI+ from engine since the higher quality scaling isn't worth the additional dependency.

Sean Hall committed Aug 1, 2020 at 09:36 UTC 3f8e35223216ebbe7f6683a5031a5a97bbc66d5a
10 files changed +180 -137
src/WixToolset.BootstrapperCore.Native/WixToolset.BootstrapperCore.Native.proj
+1 -1
@@ -1,4 +1,4 @@
1 -<?xml version="1.0" encoding="utf-8"?>
1 +<?xml version="1.0" encoding="utf-8"?>
2 <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
src/engine/engine.cpp
+9
@@ -89,6 +89,7 @@ extern "C" HRESULT EngineRun(
89 BOOL fComInitialized = FALSE;
90 BOOL fLogInitialized = FALSE;
91 BOOL fCrypInitialized = FALSE;
92 + BOOL fDpiuInitialized = FALSE;
93 BOOL fRegInitialized = FALSE;
94 BOOL fWiuInitialized = FALSE;
95 BOOL fXmlInitialized = FALSE;
@@ -132,6 +133,9 @@ extern "C" HRESULT EngineRun(
133 ExitOnFailure(hr, "Failed to initialize Cryputil.");
134 fCrypInitialized = TRUE;
135
136 + DpiuInitialize();
137 + fDpiuInitialized = TRUE;
138 +
139 hr = RegInitialize();
140 ExitOnFailure(hr, "Failed to initialize Regutil.");
141 fRegInitialized = TRUE;
@@ -241,6 +245,11 @@ LExit:
245 RegUninitialize();
246 }
247
248 + if (fDpiuInitialized)
249 + {
250 + DpiuUninitialize();
251 + }
252 +
253 if (fCrypInitialized)
254 {
255 CrypUninitialize();
src/engine/engine.vcxproj
+2 -2
@@ -2,7 +2,7 @@
2 <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 - <Import Project="..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" />
5 + <Import Project="..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" />
6
7 <ItemGroup Label="ProjectConfigurations">
8 <ProjectConfiguration Include="Debug|Win32">
@@ -165,7 +165,7 @@ rc.exe -fo "$(OutDir)engine.res" "$(IntDir)engine.messages.rc"</Command>
165 <PropertyGroup>
166 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
167 </PropertyGroup>
168 - <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props'))" />
168 + <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props'))" />
169 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.3.1.91\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.3.1.91\build\Nerdbank.GitVersioning.targets'))" />
170 </Target>
171 </Project>
src/engine/packages.config
+1 -1
@@ -1,5 +1,5 @@
1 <?xml version="1.0" encoding="utf-8"?>
2 <packages>
3 <package id="Nerdbank.GitVersioning" version="3.1.91" targetFramework="native" developmentDependency="true" />
4 - <package id="WixToolset.DUtil" version="4.0.45" targetFramework="native" />
4 + <package id="WixToolset.DUtil" version="4.0.49" targetFramework="native" />
5 </packages>
\ No newline at end of file
src/engine/precomp.h
+1 -6
@@ -6,11 +6,6 @@
6 #include <aclapi.h>
7 #include <Bits.h>
8
9 -#pragma warning(push)
10 -#pragma warning(disable:4458) // declaration of 'xxx' hides class member
11 -#include <gdiplus.h>
12 -#pragma warning(pop)
13 -
9 #include <math.h>
10 #include <msiquery.h>
11 #include <sddl.h>
@@ -37,7 +32,6 @@
32 #include <cryputil.h>
33 #include <dirutil.h>
34 #include <fileutil.h>
40 -#include <gdiputil.h>
35 #include <guidutil.h>
36 #include <logutil.h>
37 #include <memutil.h>
@@ -60,6 +54,7 @@
54 #include <dlutil.h>
55 #include <atomutil.h>
56 #include <apuputil.h>
57 +#include <dpiutil.h>
58
59 #include "..\WixToolset.BootstrapperCore.Native\inc\BootstrapperEngine.h"
60 #include "..\WixToolset.BootstrapperCore.Native\inc\BootstrapperApplication.h"
src/engine/splashscreen.cpp
+158 -119
@@ -2,8 +2,6 @@
2
3 #include "precomp.h"
4
5 -using namespace Gdiplus;
6 -
5 #define BURN_SPLASHSCREEN_CLASS_WINDOW L"WixBurnSplashScreen"
6 #define IDB_SPLASHSCREEN 1
7
@@ -11,14 +9,16 @@ using namespace Gdiplus;
9
10 struct SPLASHSCREEN_INFO
11 {
14 - Bitmap* pBitmap;
15 - Point pt;
16 - Size size;
12 + HBITMAP hBitmap;
13 + SIZE defaultDpiSize;
14 + SIZE size;
15 + UINT nDpi;
16 + HWND hWnd;
17 };
18
19 struct SPLASHSCREEN_CONTEXT
20 {
21 - HANDLE hIntializedEvent;
21 + HANDLE hInitializedEvent;
22 HINSTANCE hInstance;
23 LPCWSTR wzCaption;
24
@@ -36,14 +36,29 @@ static LRESULT CALLBACK WndProc(
36 __in WPARAM wParam,
37 __in LPARAM lParam
38 );
39 -static void OnPaint(
40 - __in HDC hdc,
41 - __in SPLASHSCREEN_INFO* pSplashScreen
42 - );
39 static HRESULT LoadSplashScreen(
44 - __in HMODULE hInstance,
40 + __in SPLASHSCREEN_CONTEXT* pContext,
41 __in SPLASHSCREEN_INFO* pSplashScreen
42 );
43 +static BOOL OnDpiChanged(
44 + __in SPLASHSCREEN_INFO* pSplashScreen,
45 + __in WPARAM wParam,
46 + __in LPARAM lParam
47 + );
48 +static void OnEraseBkgnd(
49 + __in SPLASHSCREEN_INFO* pSplashScreen,
50 + __in WPARAM wParam
51 + );
52 +static void OnNcCreate(
53 + __in HWND hWnd,
54 + __in LPARAM lParam
55 + );
56 +static void ScaleSplashScreen(
57 + __in SPLASHSCREEN_INFO* pSplashScreen,
58 + __in UINT nDpi,
59 + __in int x,
60 + __in int y
61 + );
62
63
64 // function definitions
@@ -63,7 +78,7 @@ extern "C" void SplashScreenCreate(
78 ExitOnNullWithLastError(rgSplashScreenEvents[0], hr, "Failed to create modal event.");
79
80 // create splash screen thread.
66 - context.hIntializedEvent = rgSplashScreenEvents[0];
81 + context.hInitializedEvent = rgSplashScreenEvents[0];
82 context.hInstance = hInstance;
83 context.wzCaption = wzCaption;
84 context.pHwnd = pHwnd;
@@ -115,30 +130,17 @@ static DWORD WINAPI ThreadProc(
130 )
131 {
132 HRESULT hr = S_OK;
118 -
119 - ULONG_PTR token = 0;
120 - GdiplusStartupInput input;
121 - GdiplusStartupOutput output = { };
122 -
133 SPLASHSCREEN_CONTEXT* pContext = static_cast<SPLASHSCREEN_CONTEXT*>(pvContext);
124 - SPLASHSCREEN_INFO splashScreen = { };
134 +
135 + SPLASHSCREEN_INFO splashScreenInfo = { };
136
137 WNDCLASSW wc = { };
138 BOOL fRegistered = TRUE;
128 - HWND hWnd = NULL;
139
140 BOOL fRet = FALSE;
141 MSG msg = { };
142
133 - input.GdiplusVersion = 1;
134 -
135 - hr = GdipInitialize(&input, &token, &output);
136 - ExitOnFailure(hr, "Failed to initialize GDI+.");
137 -
138 - hr = LoadSplashScreen(pContext->hInstance, &splashScreen);
139 - ExitOnFailure(hr, "Failed to load splash screen.");
140 -
141 - // Register the window class and create the window.
143 + // Register the window class.
144 wc.lpfnWndProc = WndProc;
145 wc.hInstance = pContext->hInstance;
146 wc.hCursor = ::LoadCursorW(NULL, (LPCWSTR)IDC_ARROW);
@@ -150,12 +152,12 @@ static DWORD WINAPI ThreadProc(
152
153 fRegistered = TRUE;
154
153 - hWnd = ::CreateWindowExW(WS_EX_TOOLWINDOW, wc.lpszClassName, pContext->wzCaption, WS_POPUP | WS_VISIBLE, splashScreen.pt.X, splashScreen.pt.Y, splashScreen.size.Width, splashScreen.size.Height, HWND_DESKTOP, NULL, pContext->hInstance, &splashScreen);
154 - ExitOnNullWithLastError(hWnd, hr, "Failed to create window.");
155 + hr = LoadSplashScreen(pContext, &splashScreenInfo);
156 + ExitOnFailure(hr, "Failed to load splash screen.");
157
158 // Return the splash screen window and free the main thread waiting for us to be initialized.
157 - *pContext->pHwnd = hWnd;
158 - ::SetEvent(pContext->hIntializedEvent);
159 + *pContext->pHwnd = splashScreenInfo.hWnd;
160 + ::SetEvent(pContext->hInitializedEvent);
161
162 // Pump messages until the bootstrapper application destroys the window.
163 while (0 != (fRet = ::GetMessageW(&msg, NULL, 0, 0)))
@@ -165,7 +167,7 @@ static DWORD WINAPI ThreadProc(
167 hr = E_UNEXPECTED;
168 ExitOnFailure(hr, "Unexpected return value from message pump.");
169 }
168 - else if (!::IsDialogMessageW(hWnd, &msg))
170 + else if (!::IsDialogMessageW(splashScreenInfo.hWnd, &msg))
171 {
172 ::TranslateMessage(&msg);
173 ::DispatchMessageW(&msg);
@@ -178,14 +180,9 @@ LExit:
180 ::UnregisterClassW(BURN_SPLASHSCREEN_CLASS_WINDOW, pContext->hInstance);
181 }
182
181 - if (splashScreen.pBitmap)
182 - {
183 - delete splashScreen.pBitmap;
184 - }
185 -
186 - if (token)
183 + if (splashScreenInfo.hBitmap)
184 {
188 - GdipUninitialize(token);
185 + ::DeleteObject(splashScreenInfo.hBitmap);
186 }
187
188 return hr;
@@ -204,113 +201,155 @@ static LRESULT CALLBACK WndProc(
201 switch (uMsg)
202 {
203 case WM_NCCREATE:
207 - {
208 - LPCREATESTRUCTW lpcs = reinterpret_cast<LPCREATESTRUCTW>(lParam);
209 - ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(lpcs->lpCreateParams));
210 - }
204 + OnNcCreate(hWnd, lParam);
205 break;
206
207 case WM_NCDESTROY:
208 lres = ::DefWindowProcW(hWnd, uMsg, wParam, lParam);
209 ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, 0);
210 + ::PostQuitMessage(0);
211 return lres;
212
213 case WM_NCHITTEST:
214 return HTCAPTION; // allow window to be moved by grabbing any pixel.
215
221 - case WM_DESTROY:
222 - ::PostQuitMessage(0);
223 - return 0;
216 + case WM_DPICHANGED:
217 + if (OnDpiChanged(pSplashScreen, wParam, lParam))
218 + {
219 + return 0;
220 + }
221 + break;
222
223 case WM_ERASEBKGND:
226 - // The splash screen image will be repainted in its entirety.
224 + OnEraseBkgnd(pSplashScreen, wParam);
225 return 1;
228 -
229 - case WM_PAINT:
230 - {
231 - PAINTSTRUCT ps = { };
232 -
233 - HDC hdc = BeginPaint(hWnd, &ps);
234 - OnPaint(hdc, pSplashScreen);
235 - EndPaint(hWnd, &ps);
236 - }
237 - return 0;
226 }
227
228 return ::DefWindowProcW(hWnd, uMsg, wParam, lParam);
229 }
230
243 -static void OnPaint(
244 - __in HDC hdc,
245 - __in SPLASHSCREEN_INFO* pSplashScreen
246 - )
247 -{
248 - // Use high-quality bicubuc stretching from GDI+ which looks better than GDI.
249 - Graphics graphics(hdc);
250 - graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
251 -
252 - Rect dst(0, 0, pSplashScreen->size.Width, pSplashScreen->size.Height);
253 - Status status = graphics.DrawImage(pSplashScreen->pBitmap, dst);
254 -
255 -#if DEBUG
256 - HRESULT hr = GdipHresultFromStatus(status);
257 - TraceError(hr, "Failed to draw splash screen bitmap.");
258 -#else
259 - UNREFERENCED_PARAMETER(status);
260 -#endif
261 -}
262 -
231 static HRESULT LoadSplashScreen(
264 - __in HMODULE hInstance,
232 + __in SPLASHSCREEN_CONTEXT* pContext,
233 __in SPLASHSCREEN_INFO* pSplashScreen
234 )
235 {
236 HRESULT hr = S_OK;
269 - POINT ptCursor = { };
270 - HMONITOR hMonitor = NULL;
271 - MONITORINFOEXW mi;
272 - HDC hdc = NULL;
273 - UINT dpiX = 0;
274 - UINT dpiY = 0;
275 -
276 - pSplashScreen->pBitmap = Bitmap::FromResource(hInstance, MAKEINTRESOURCEW(IDB_SPLASHSCREEN));
277 - ExitOnNull(pSplashScreen->pBitmap, hr, E_INVALIDDATA, "Failed to find the splash screen bitmap.");
278 - ExitOnGdipFailure(pSplashScreen->pBitmap->GetLastStatus(), hr, "Failed to load the splash screen bitmap.");
279 -
280 - pSplashScreen->pt.X = CW_USEDEFAULT;
281 - pSplashScreen->pt.Y = CW_USEDEFAULT;
282 - pSplashScreen->size.Width = pSplashScreen->pBitmap->GetWidth();
283 - pSplashScreen->size.Height = pSplashScreen->pBitmap->GetHeight();
284 -
285 - // Stretch and center the window on the monitor with the mouse.
286 - if (::GetCursorPos(&ptCursor))
237 + BITMAP bmp = { };
238 + POINT pt = { };
239 + int x = 0;
240 + int y = 0;
241 + DPIU_MONITOR_CONTEXT* pMonitorContext = NULL;
242 + RECT* pMonitorRect = NULL;
243 +
244 + pSplashScreen->nDpi = USER_DEFAULT_SCREEN_DPI;
245 + pSplashScreen->hBitmap = ::LoadBitmapW(pContext->hInstance, MAKEINTRESOURCEW(IDB_SPLASHSCREEN));
246 + ExitOnNullWithLastError(pSplashScreen->hBitmap, hr, "Failed to load splash screen bitmap.");
247 +
248 + ::GetObject(pSplashScreen->hBitmap, sizeof(bmp), static_cast<void*>(&bmp));
249 + pSplashScreen->defaultDpiSize.cx = pSplashScreen->size.cx = bmp.bmWidth;
250 + pSplashScreen->defaultDpiSize.cy = pSplashScreen->size.cy = bmp.bmHeight;
251 +
252 + // Try to default to the monitor with the mouse, otherwise default to the primary monitor.
253 + if (!::GetCursorPos(&pt))
254 {
288 - hMonitor = ::MonitorFromPoint(ptCursor, MONITOR_DEFAULTTONEAREST);
289 - if (hMonitor)
255 + pt.x = 0;
256 + pt.y = 0;
257 + }
258 +
259 + // Try to center the window on the chosen monitor.
260 + hr = DpiuGetMonitorContextFromPoint(&pt, &pMonitorContext);
261 + if (SUCCEEDED(hr))
262 + {
263 + pMonitorRect = &pMonitorContext->mi.rcWork;
264 + if (pMonitorContext->nDpi != pSplashScreen->nDpi)
265 {
291 - ZeroMemory(&mi, sizeof(mi));
292 - mi.cbSize = sizeof(mi);
293 -
294 - if (::GetMonitorInfoW(hMonitor, &mi))
295 - {
296 - hdc = ::CreateDCW(L"DISPLAY", mi.szDevice, NULL, NULL);
297 - if (hdc)
298 - {
299 - dpiX = ::GetDeviceCaps(hdc, LOGPIXELSX);
300 - dpiY = ::GetDeviceCaps(hdc, LOGPIXELSY);
301 -
302 - pSplashScreen->size.Width = pSplashScreen->size.Width * dpiX / 96;
303 - pSplashScreen->size.Height = pSplashScreen->size.Height * dpiY / 96;
304 -
305 - ::ReleaseDC(NULL, hdc);
306 - }
307 -
308 - pSplashScreen->pt.X = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - pSplashScreen->size.Width) / 2;
309 - pSplashScreen->pt.Y = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - pSplashScreen->size.Height) / 2;
310 - }
266 + ScaleSplashScreen(pSplashScreen, pMonitorContext->nDpi, pMonitorRect->left, pMonitorRect->top);
267 }
268 +
269 + x = pMonitorRect->left + (pMonitorRect->right - pMonitorRect->left - pSplashScreen->size.cx) / 2;
270 + y = pMonitorRect->top + (pMonitorRect->bottom - pMonitorRect->top - pSplashScreen->size.cy) / 2;
271 }
272 + else
273 + {
274 + hr = S_OK;
275 + x = CW_USEDEFAULT;
276 + y = CW_USEDEFAULT;
277 + }
278 +
279 + pSplashScreen->hWnd = ::CreateWindowExW(WS_EX_TOOLWINDOW, BURN_SPLASHSCREEN_CLASS_WINDOW, pContext->wzCaption, WS_POPUP | WS_VISIBLE, x, y, pSplashScreen->size.cx, pSplashScreen->size.cy, HWND_DESKTOP, NULL, pContext->hInstance, pSplashScreen);
280 + ExitOnNullWithLastError(pSplashScreen->hWnd, hr, "Failed to create window.");
281
282 LExit:
283 + MemFree(pMonitorContext);
284 +
285 return hr;
286 }
287 +
288 +static BOOL OnDpiChanged(
289 + __in SPLASHSCREEN_INFO* pSplashScreen,
290 + __in WPARAM wParam,
291 + __in LPARAM lParam
292 + )
293 +{
294 + UINT nDpi = HIWORD(wParam);
295 + RECT* pRect = reinterpret_cast<RECT*>(lParam);
296 + BOOL fDpiChanged = pSplashScreen->nDpi != nDpi;
297 +
298 + if (fDpiChanged)
299 + {
300 + ScaleSplashScreen(pSplashScreen, nDpi, pRect->left, pRect->top);
301 + }
302 +
303 + return fDpiChanged;
304 +}
305 +
306 +static void OnEraseBkgnd(
307 + __in SPLASHSCREEN_INFO* pSplashScreen,
308 + __in WPARAM wParam
309 + )
310 +{
311 + HDC hdc = reinterpret_cast<HDC>(wParam);
312 + HDC hdcMem = ::CreateCompatibleDC(hdc);
313 + HBITMAP hDefaultBitmap = static_cast<HBITMAP>(::SelectObject(hdcMem, pSplashScreen->hBitmap));
314 + ::StretchBlt(hdc, 0, 0, pSplashScreen->size.cx, pSplashScreen->size.cy, hdcMem, 0, 0, pSplashScreen->defaultDpiSize.cx, pSplashScreen->defaultDpiSize.cy, SRCCOPY);
315 + ::SelectObject(hdcMem, hDefaultBitmap);
316 + ::DeleteDC(hdcMem);
317 +}
318 +
319 +static void OnNcCreate(
320 + __in HWND hWnd,
321 + __in LPARAM lParam
322 + )
323 +{
324 + DPIU_WINDOW_CONTEXT windowContext = { };
325 + CREATESTRUCTW* pCreateStruct = reinterpret_cast<CREATESTRUCTW*>(lParam);
326 + SPLASHSCREEN_INFO* pSplashScreen = reinterpret_cast<SPLASHSCREEN_INFO*>(pCreateStruct->lpCreateParams);
327 +
328 + ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pSplashScreen));
329 + pSplashScreen->hWnd = hWnd;
330 +
331 + DpiuGetWindowContext(pSplashScreen->hWnd, &windowContext);
332 +
333 + if (windowContext.nDpi != pSplashScreen->nDpi)
334 + {
335 + ScaleSplashScreen(pSplashScreen, windowContext.nDpi, pCreateStruct->x, pCreateStruct->y);
336 + }
337 +}
338 +
339 +static void ScaleSplashScreen(
340 + __in SPLASHSCREEN_INFO* pSplashScreen,
341 + __in UINT nDpi,
342 + __in int x,
343 + __in int y
344 + )
345 +{
346 + pSplashScreen->nDpi = nDpi;
347 +
348 + pSplashScreen->size.cx = DpiuScaleValue(pSplashScreen->defaultDpiSize.cx, pSplashScreen->nDpi);
349 + pSplashScreen->size.cy = DpiuScaleValue(pSplashScreen->defaultDpiSize.cy, pSplashScreen->nDpi);
350 +
351 + if (pSplashScreen->hWnd)
352 + {
353 + ::SetWindowPos(pSplashScreen->hWnd, NULL, x, y, pSplashScreen->size.cx, pSplashScreen->size.cy, SWP_NOACTIVATE | SWP_NOZORDER);
354 + }
355 +}
src/stub/packages.config
+1 -1
@@ -4,5 +4,5 @@
4 <package id="Microsoft.SourceLink.Common" version="1.0.0" targetFramework="native" developmentDependency="true" />
5 <package id="Microsoft.SourceLink.GitHub" version="1.0.0" targetFramework="native" developmentDependency="true" />
6 <package id="Nerdbank.GitVersioning" version="3.1.91" targetFramework="native" developmentDependency="true" />
7 - <package id="WixToolset.DUtil" version="4.0.45" targetFramework="native" />
7 + <package id="WixToolset.DUtil" version="4.0.49" targetFramework="native" />
8 </packages>
\ No newline at end of file
src/stub/stub.vcxproj
+3 -3
@@ -5,7 +5,7 @@
5 <Import Project="..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" />
6 <Import Project="..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props')" />
7 <Import Project="..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props" Condition="Exists('..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props')" />
8 - <Import Project="..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" />
8 + <Import Project="..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" />
9
10 <ItemGroup Label="ProjectConfigurations">
11 <ProjectConfiguration Include="Debug|Win32">
@@ -62,7 +62,7 @@
62 <Link>
63 <SwapRunFromCD>true</SwapRunFromCD>
64 <SwapRunFromNET>true</SwapRunFromNET>
65 - <DelayLoadDLLs>cabinet.dll;crypt32.dll;gdiplus.dll;msi.dll;shlwapi.dll;version.dll;wininet.dll;wintrust.dll</DelayLoadDLLs>
65 + <DelayLoadDLLs>cabinet.dll;crypt32.dll;msi.dll;shlwapi.dll;version.dll;wininet.dll;wintrust.dll</DelayLoadDLLs>
66 </Link>
67 </ItemDefinitionGroup>
68
@@ -107,6 +107,6 @@
107 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props'))" />
108 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets'))" />
109 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.3.1.91\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.3.1.91\build\Nerdbank.GitVersioning.targets'))" />
110 - <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props'))" />
110 + <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props'))" />
111 </Target>
112 </Project>
\ No newline at end of file
src/test/BurnUnitTest/BurnUnitTest.vcxproj
+3 -3
@@ -4,7 +4,7 @@
4
5 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
6 <Import Project="..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.props" Condition="Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.props')" />
7 - <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" />
7 + <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" />
8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|Win32">
10 <Configuration>Debug</Configuration>
@@ -28,7 +28,7 @@
28 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
29 <PropertyGroup>
30 <ProjectAdditionalIncludeDirectories>..\..\engine;..\..\WixToolset.BootstrapperCore.Native\inc</ProjectAdditionalIncludeDirectories>
31 - <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;gdiplus.lib</ProjectAdditionalLinkLibraries>
31 + <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib</ProjectAdditionalLinkLibraries>
32 </PropertyGroup>
33 <ItemGroup>
34 <ClCompile Include="AssemblyInfo.cpp" />
@@ -80,6 +80,6 @@
80 </PropertyGroup>
81 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.props'))" />
82 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.40\build\WixBuildTools.TestSupport.Native.targets'))" />
83 - <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.45\build\WixToolset.DUtil.props'))" />
83 + <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.49\build\WixToolset.DUtil.props'))" />
84 </Target>
85 </Project>
src/test/BurnUnitTest/packages.config
+1 -1
@@ -9,5 +9,5 @@
9 <package id="xunit.runner.visualstudio" version="2.4.1" />
10 <package id="WixBuildTools.TestSupport" version="4.0.40" />
11 <package id="WixBuildTools.TestSupport.Native" version="4.0.40" />
12 - <package id="WixToolset.DUtil" version="4.0.45" targetFramework="native" />
12 + <package id="WixToolset.DUtil" version="4.0.49" targetFramework="native" />
13 </packages>
\ No newline at end of file