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