diff options
Diffstat (limited to 'src')
79 files changed, 3268 insertions, 2826 deletions
diff --git a/src/api/burn/WixToolset.BootstrapperApplicationApi/IPackageInfo.cs b/src/api/burn/WixToolset.BootstrapperApplicationApi/IPackageInfo.cs index e2512584..9b5e74cb 100644 --- a/src/api/burn/WixToolset.BootstrapperApplicationApi/IPackageInfo.cs +++ b/src/api/burn/WixToolset.BootstrapperApplicationApi/IPackageInfo.cs | |||
| @@ -28,6 +28,11 @@ namespace WixToolset.BootstrapperApplicationApi | |||
| 28 | string DisplayInternalUICondition { get; } | 28 | string DisplayInternalUICondition { get; } |
| 29 | 29 | ||
| 30 | /// <summary> | 30 | /// <summary> |
| 31 | /// The authored bal:DisplayFilesInUseDialogCondition. | ||
| 32 | /// </summary> | ||
| 33 | string DisplayFilesInUseDialogCondition { get; } | ||
| 34 | |||
| 35 | /// <summary> | ||
| 31 | /// The package's display name. | 36 | /// The package's display name. |
| 32 | /// </summary> | 37 | /// </summary> |
| 33 | string DisplayName { get; } | 38 | string DisplayName { get; } |
diff --git a/src/api/burn/WixToolset.BootstrapperApplicationApi/PackageInfo.cs b/src/api/burn/WixToolset.BootstrapperApplicationApi/PackageInfo.cs index e835f9ea..81a8869f 100644 --- a/src/api/burn/WixToolset.BootstrapperApplicationApi/PackageInfo.cs +++ b/src/api/burn/WixToolset.BootstrapperApplicationApi/PackageInfo.cs | |||
| @@ -121,6 +121,9 @@ namespace WixToolset.BootstrapperApplicationApi | |||
| 121 | public string DisplayInternalUICondition { get; internal set; } | 121 | public string DisplayInternalUICondition { get; internal set; } |
| 122 | 122 | ||
| 123 | /// <inheritdoc/> | 123 | /// <inheritdoc/> |
| 124 | public string DisplayFilesInUseDialogCondition { get; internal set; } | ||
| 125 | |||
| 126 | /// <inheritdoc/> | ||
| 124 | public string ProductCode { get; internal set; } | 127 | public string ProductCode { get; internal set; } |
| 125 | 128 | ||
| 126 | /// <inheritdoc/> | 129 | /// <inheritdoc/> |
| @@ -363,6 +366,7 @@ namespace WixToolset.BootstrapperApplicationApi | |||
| 363 | var package = (PackageInfo)ipackage; | 366 | var package = (PackageInfo)ipackage; |
| 364 | 367 | ||
| 365 | package.DisplayInternalUICondition = BootstrapperApplicationData.GetAttribute(node, "DisplayInternalUICondition"); | 368 | package.DisplayInternalUICondition = BootstrapperApplicationData.GetAttribute(node, "DisplayInternalUICondition"); |
| 369 | package.DisplayFilesInUseDialogCondition = BootstrapperApplicationData.GetAttribute(node, "DisplayFilesInUseDialogCondition"); | ||
| 366 | } | 370 | } |
| 367 | 371 | ||
| 368 | nodes = root.Select("/p:BootstrapperApplicationData/p:WixPrereqInformation", namespaceManager); | 372 | nodes = root.Select("/p:BootstrapperApplicationData/p:WixPrereqInformation", namespaceManager); |
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index 38c4bd18..ff0dfd9f 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
| @@ -291,6 +291,7 @@ DAPI_(void) BalInfoUninitialize( | |||
| 291 | ReleaseStr(pBundle->packages.rgPackages[i].sczDescription); | 291 | ReleaseStr(pBundle->packages.rgPackages[i].sczDescription); |
| 292 | ReleaseStr(pBundle->packages.rgPackages[i].sczId); | 292 | ReleaseStr(pBundle->packages.rgPackages[i].sczId); |
| 293 | ReleaseStr(pBundle->packages.rgPackages[i].sczDisplayInternalUICondition); | 293 | ReleaseStr(pBundle->packages.rgPackages[i].sczDisplayInternalUICondition); |
| 294 | ReleaseStr(pBundle->packages.rgPackages[i].sczDisplayFilesInUseDialogCondition); | ||
| 294 | ReleaseStr(pBundle->packages.rgPackages[i].sczProductCode); | 295 | ReleaseStr(pBundle->packages.rgPackages[i].sczProductCode); |
| 295 | ReleaseStr(pBundle->packages.rgPackages[i].sczUpgradeCode); | 296 | ReleaseStr(pBundle->packages.rgPackages[i].sczUpgradeCode); |
| 296 | ReleaseStr(pBundle->packages.rgPackages[i].sczVersion); | 297 | ReleaseStr(pBundle->packages.rgPackages[i].sczVersion); |
| @@ -517,6 +518,9 @@ static HRESULT ParseBalPackageInfoFromXml( | |||
| 517 | hr = XmlGetAttributeEx(pNode, L"DisplayInternalUICondition", &pPackage->sczDisplayInternalUICondition); | 518 | hr = XmlGetAttributeEx(pNode, L"DisplayInternalUICondition", &pPackage->sczDisplayInternalUICondition); |
| 518 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get DisplayInternalUICondition setting for package."); | 519 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get DisplayInternalUICondition setting for package."); |
| 519 | 520 | ||
| 521 | hr = XmlGetAttributeEx(pNode, L"DisplayFilesInUseDialogCondition", &pPackage->sczDisplayFilesInUseDialogCondition); | ||
| 522 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get DisplayFilesInUseDialogCondition setting for package."); | ||
| 523 | |||
| 520 | hr = XmlGetAttributeEx(pNode, L"PrimaryPackageType", &scz); | 524 | hr = XmlGetAttributeEx(pNode, L"PrimaryPackageType", &scz); |
| 521 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get PrimaryPackageType setting for package."); | 525 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get PrimaryPackageType setting for package."); |
| 522 | 526 | ||
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h index 234284f6..8baee844 100644 --- a/src/api/burn/balutil/inc/balinfo.h +++ b/src/api/burn/balutil/inc/balinfo.h | |||
| @@ -54,6 +54,7 @@ typedef struct _BAL_INFO_PACKAGE | |||
| 54 | BOOL fPermanent; | 54 | BOOL fPermanent; |
| 55 | BOOL fVital; | 55 | BOOL fVital; |
| 56 | LPWSTR sczDisplayInternalUICondition; | 56 | LPWSTR sczDisplayInternalUICondition; |
| 57 | LPWSTR sczDisplayFilesInUseDialogCondition; | ||
| 57 | LPWSTR sczProductCode; | 58 | LPWSTR sczProductCode; |
| 58 | LPWSTR sczUpgradeCode; | 59 | LPWSTR sczUpgradeCode; |
| 59 | LPWSTR sczVersion; | 60 | LPWSTR sczVersion; |
diff --git a/src/ext/Bal/stdbas/WixInternalUIBootstrapperApplication.cpp b/src/ext/Bal/stdbas/WixInternalUIBootstrapperApplication.cpp index 270ce40c..bae098d4 100644 --- a/src/ext/Bal/stdbas/WixInternalUIBootstrapperApplication.cpp +++ b/src/ext/Bal/stdbas/WixInternalUIBootstrapperApplication.cpp | |||
| @@ -557,14 +557,19 @@ private: | |||
| 557 | HRESULT CreateMainWindow() | 557 | HRESULT CreateMainWindow() |
| 558 | { | 558 | { |
| 559 | HRESULT hr = S_OK; | 559 | HRESULT hr = S_OK; |
| 560 | WNDCLASSW wc = { }; | 560 | WNDCLASSEXW wc = { }; |
| 561 | DWORD dwWindowStyle = WS_POPUP; | 561 | DWORD dwWindowStyle = WS_POPUP; |
| 562 | 562 | ||
| 563 | LoadBundleIcon(m_hModule, &m_hIcon, &m_hSmallIcon); | ||
| 564 | |||
| 565 | wc.cbSize = sizeof(WNDCLASSEXW); | ||
| 563 | wc.lpfnWndProc = CWixInternalUIBootstrapperApplication::WndProc; | 566 | wc.lpfnWndProc = CWixInternalUIBootstrapperApplication::WndProc; |
| 564 | wc.hInstance = m_hModule; | 567 | wc.hInstance = m_hModule; |
| 565 | wc.lpszClassName = WIXIUIBA_WINDOW_CLASS; | 568 | wc.lpszClassName = WIXIUIBA_WINDOW_CLASS; |
| 569 | wc.hIcon = m_hIcon; | ||
| 570 | wc.hIconSm = m_hSmallIcon; | ||
| 566 | 571 | ||
| 567 | if (!::RegisterClassW(&wc)) | 572 | if (!::RegisterClassExW(&wc)) |
| 568 | { | 573 | { |
| 569 | ExitWithLastError(hr, "Failed to register window."); | 574 | ExitWithLastError(hr, "Failed to register window."); |
| 570 | } | 575 | } |
| @@ -601,6 +606,18 @@ private: | |||
| 601 | ::UnregisterClassW(WIXIUIBA_WINDOW_CLASS, m_hModule); | 606 | ::UnregisterClassW(WIXIUIBA_WINDOW_CLASS, m_hModule); |
| 602 | m_fRegistered = FALSE; | 607 | m_fRegistered = FALSE; |
| 603 | } | 608 | } |
| 609 | |||
| 610 | if (m_hIcon) | ||
| 611 | { | ||
| 612 | ::DestroyIcon(m_hIcon); | ||
| 613 | m_hIcon = NULL; | ||
| 614 | } | ||
| 615 | |||
| 616 | if (m_hSmallIcon) | ||
| 617 | { | ||
| 618 | ::DestroyIcon(m_hSmallIcon); | ||
| 619 | m_hSmallIcon = NULL; | ||
| 620 | } | ||
| 604 | } | 621 | } |
| 605 | 622 | ||
| 606 | // | 623 | // |
| @@ -807,6 +824,8 @@ public: | |||
| 807 | m_sczFailedMessage = NULL; | 824 | m_sczFailedMessage = NULL; |
| 808 | 825 | ||
| 809 | m_hUiThread = NULL; | 826 | m_hUiThread = NULL; |
| 827 | m_hIcon = NULL; | ||
| 828 | m_hSmallIcon = NULL; | ||
| 810 | m_fRegistered = FALSE; | 829 | m_fRegistered = FALSE; |
| 811 | m_hWnd = NULL; | 830 | m_hWnd = NULL; |
| 812 | 831 | ||
| @@ -847,6 +866,8 @@ private: | |||
| 847 | LPWSTR m_sczConfirmCloseMessage; | 866 | LPWSTR m_sczConfirmCloseMessage; |
| 848 | 867 | ||
| 849 | HANDLE m_hUiThread; | 868 | HANDLE m_hUiThread; |
| 869 | HICON m_hIcon; | ||
| 870 | HICON m_hSmallIcon; | ||
| 850 | BOOL m_fRegistered; | 871 | BOOL m_fRegistered; |
| 851 | HWND m_hWnd; | 872 | HWND m_hWnd; |
| 852 | 873 | ||
diff --git a/src/ext/Bal/stdbas/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/stdbas/WixStandardBootstrapperApplication.cpp index 6cfe0b4c..c1e8b2b3 100644 --- a/src/ext/Bal/stdbas/WixStandardBootstrapperApplication.cpp +++ b/src/ext/Bal/stdbas/WixStandardBootstrapperApplication.cpp | |||
| @@ -1231,34 +1231,52 @@ public: // IBootstrapperApplication | |||
| 1231 | __inout int* pResult | 1231 | __inout int* pResult |
| 1232 | ) | 1232 | ) |
| 1233 | { | 1233 | { |
| 1234 | HRESULT hr = S_OK; | ||
| 1235 | BAL_INFO_PACKAGE* pPackage = NULL; | ||
| 1236 | BOOL fShowFilesInUseDialog = TRUE; | ||
| 1234 | 1237 | ||
| 1235 | if (!m_fShowingInternalUiThisPackage && wzPackageId && *wzPackageId) | 1238 | if (!m_fShowingInternalUiThisPackage && wzPackageId && *wzPackageId) |
| 1236 | { | 1239 | { |
| 1237 | BalLog(BOOTSTRAPPER_LOG_LEVEL_VERBOSE, "Package %ls has %d applications holding files in use.", wzPackageId, cFiles); | 1240 | BalLog(BOOTSTRAPPER_LOG_LEVEL_VERBOSE, "Package %ls has %d applications holding files in use.", wzPackageId, cFiles); |
| 1238 | 1241 | ||
| 1239 | switch (source) | 1242 | hr = BalInfoFindPackageById(&m_Bundle.packages, wzPackageId, &pPackage); |
| 1243 | if (SUCCEEDED(hr) && pPackage->sczDisplayFilesInUseDialogCondition) | ||
| 1240 | { | 1244 | { |
| 1241 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI: | 1245 | hr = BalEvaluateCondition(pPackage->sczDisplayFilesInUseDialogCondition, &fShowFilesInUseDialog); |
| 1242 | if (m_fShowStandardFilesInUse) | 1246 | BalExitOnFailure(hr, "Failed to evaluate condition for package '%ls': %ls", wzPackageId, pPackage->sczDisplayFilesInUseDialogCondition); |
| 1243 | { | 1247 | } |
| 1244 | return ShowMsiFilesInUse(cFiles, rgwzFiles, source, pResult); | 1248 | |
| 1245 | } | 1249 | if (fShowFilesInUseDialog) |
| 1246 | break; | 1250 | { |
| 1247 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI_RM: | 1251 | switch (source) |
| 1248 | if (m_fShowRMFilesInUse) | ||
| 1249 | { | ||
| 1250 | return ShowMsiFilesInUse(cFiles, rgwzFiles, source, pResult); | ||
| 1251 | } | ||
| 1252 | break; | ||
| 1253 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_NETFX: | ||
| 1254 | if (m_fShowNetfxFilesInUse) | ||
| 1255 | { | 1252 | { |
| 1256 | return ShowNetfxFilesInUse(cFiles, rgwzFiles, pResult); | 1253 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI: |
| 1254 | if (m_fShowStandardFilesInUse) | ||
| 1255 | { | ||
| 1256 | return ShowMsiFilesInUse(cFiles, rgwzFiles, source, pResult); | ||
| 1257 | } | ||
| 1258 | break; | ||
| 1259 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI_RM: | ||
| 1260 | if (m_fShowRMFilesInUse) | ||
| 1261 | { | ||
| 1262 | return ShowMsiFilesInUse(cFiles, rgwzFiles, source, pResult); | ||
| 1263 | } | ||
| 1264 | break; | ||
| 1265 | case BOOTSTRAPPER_FILES_IN_USE_TYPE_NETFX: | ||
| 1266 | if (m_fShowNetfxFilesInUse) | ||
| 1267 | { | ||
| 1268 | return ShowNetfxFilesInUse(cFiles, rgwzFiles, pResult); | ||
| 1269 | } | ||
| 1270 | break; | ||
| 1257 | } | 1271 | } |
| 1258 | break; | 1272 | } |
| 1273 | else | ||
| 1274 | { | ||
| 1275 | *pResult = IDIGNORE; | ||
| 1259 | } | 1276 | } |
| 1260 | } | 1277 | } |
| 1261 | 1278 | ||
| 1279 | LExit: | ||
| 1262 | return __super::OnExecuteFilesInUse(wzPackageId, cFiles, rgwzFiles, nRecommendation, source, pResult); | 1280 | return __super::OnExecuteFilesInUse(wzPackageId, cFiles, rgwzFiles, nRecommendation, source, pResult); |
| 1263 | } | 1281 | } |
| 1264 | 1282 | ||
| @@ -3283,26 +3301,24 @@ private: | |||
| 3283 | HRESULT CreateMainWindow() | 3301 | HRESULT CreateMainWindow() |
| 3284 | { | 3302 | { |
| 3285 | HRESULT hr = S_OK; | 3303 | HRESULT hr = S_OK; |
| 3286 | WNDCLASSW wc = { }; | 3304 | WNDCLASSEXW wc = { sizeof(WNDCLASSEXW)}; |
| 3287 | DWORD dwWindowStyle = 0; | 3305 | DWORD dwWindowStyle = 0; |
| 3288 | int x = CW_USEDEFAULT; | 3306 | int x = CW_USEDEFAULT; |
| 3289 | int y = CW_USEDEFAULT; | 3307 | int y = CW_USEDEFAULT; |
| 3290 | POINT ptCursor = { }; | 3308 | POINT ptCursor = { }; |
| 3291 | 3309 | ||
| 3292 | ThemeInitializeWindowClass(m_pTheme, &wc, CWixStandardBootstrapperApplication::WndProc, m_hModule, WIXSTDBA_WINDOW_CLASS); | 3310 | ThemeInitializeWindowClassEx(m_pTheme, &wc, CWixStandardBootstrapperApplication::WndProc, m_hModule, WIXSTDBA_WINDOW_CLASS); |
| 3293 | 3311 | ||
| 3294 | // If the theme did not provide an icon, try using the icon from the bundle engine. | 3312 | // If the theme did not provide an icon, try using the icon from the bundle then fallback to the bundle engine. |
| 3295 | if (!wc.hIcon) | 3313 | if (!wc.hIcon) |
| 3296 | { | 3314 | { |
| 3297 | HMODULE hBootstrapperEngine = ::GetModuleHandleW(NULL); | 3315 | LoadBundleIcon(m_hModule, &m_hIcon, &m_hSmallIcon); |
| 3298 | if (hBootstrapperEngine) | 3316 | wc.hIcon = m_hIcon; |
| 3299 | { | 3317 | wc.hIconSm = m_hSmallIcon; |
| 3300 | wc.hIcon = ::LoadIconW(hBootstrapperEngine, MAKEINTRESOURCEW(1)); | ||
| 3301 | } | ||
| 3302 | } | 3318 | } |
| 3303 | 3319 | ||
| 3304 | // Register the window class and create the window. | 3320 | // Register the window class and create the window. |
| 3305 | if (!::RegisterClassW(&wc)) | 3321 | if (!::RegisterClassExW(&wc)) |
| 3306 | { | 3322 | { |
| 3307 | ExitWithLastError(hr, "Failed to register window."); | 3323 | ExitWithLastError(hr, "Failed to register window."); |
| 3308 | } | 3324 | } |
| @@ -3340,7 +3356,6 @@ private: | |||
| 3340 | return hr; | 3356 | return hr; |
| 3341 | } | 3357 | } |
| 3342 | 3358 | ||
| 3343 | |||
| 3344 | // | 3359 | // |
| 3345 | // InitializeTaskbarButton - initializes taskbar button for progress. | 3360 | // InitializeTaskbarButton - initializes taskbar button for progress. |
| 3346 | // | 3361 | // |
| @@ -3379,6 +3394,18 @@ private: | |||
| 3379 | ::UnregisterClassW(WIXSTDBA_WINDOW_CLASS, m_hModule); | 3394 | ::UnregisterClassW(WIXSTDBA_WINDOW_CLASS, m_hModule); |
| 3380 | m_fRegistered = FALSE; | 3395 | m_fRegistered = FALSE; |
| 3381 | } | 3396 | } |
| 3397 | |||
| 3398 | if (m_hIcon) | ||
| 3399 | { | ||
| 3400 | ::DestroyIcon(m_hIcon); | ||
| 3401 | m_hIcon = NULL; | ||
| 3402 | } | ||
| 3403 | |||
| 3404 | if (m_hSmallIcon) | ||
| 3405 | { | ||
| 3406 | ::DestroyIcon(m_hSmallIcon); | ||
| 3407 | m_hSmallIcon = NULL; | ||
| 3408 | } | ||
| 3382 | } | 3409 | } |
| 3383 | 3410 | ||
| 3384 | 3411 | ||
| @@ -4804,6 +4831,8 @@ public: | |||
| 4804 | m_pTheme = NULL; | 4831 | m_pTheme = NULL; |
| 4805 | memset(m_rgdwPageIds, 0, sizeof(m_rgdwPageIds)); | 4832 | memset(m_rgdwPageIds, 0, sizeof(m_rgdwPageIds)); |
| 4806 | m_hUiThread = NULL; | 4833 | m_hUiThread = NULL; |
| 4834 | m_hIcon = NULL; | ||
| 4835 | m_hSmallIcon = NULL; | ||
| 4807 | m_fRegistered = FALSE; | 4836 | m_fRegistered = FALSE; |
| 4808 | m_hWnd = NULL; | 4837 | m_hWnd = NULL; |
| 4809 | 4838 | ||
| @@ -5092,6 +5121,8 @@ private: | |||
| 5092 | THEME_ASSIGN_CONTROL_ID m_rgInitControls[LAST_WIXSTDBA_CONTROL - WIXSTDBA_FIRST_ASSIGN_CONTROL_ID]; | 5121 | THEME_ASSIGN_CONTROL_ID m_rgInitControls[LAST_WIXSTDBA_CONTROL - WIXSTDBA_FIRST_ASSIGN_CONTROL_ID]; |
| 5093 | DWORD m_rgdwPageIds[countof(vrgwzPageNames)]; | 5122 | DWORD m_rgdwPageIds[countof(vrgwzPageNames)]; |
| 5094 | HANDLE m_hUiThread; | 5123 | HANDLE m_hUiThread; |
| 5124 | HICON m_hIcon; | ||
| 5125 | HICON m_hSmallIcon; | ||
| 5095 | BOOL m_fRegistered; | 5126 | BOOL m_fRegistered; |
| 5096 | HWND m_hWnd; | 5127 | HWND m_hWnd; |
| 5097 | 5128 | ||
diff --git a/src/ext/Bal/stdbas/precomp.h b/src/ext/Bal/stdbas/precomp.h index a6c4cfe4..0faf1548 100644 --- a/src/ext/Bal/stdbas/precomp.h +++ b/src/ext/Bal/stdbas/precomp.h | |||
| @@ -42,3 +42,9 @@ | |||
| 42 | 42 | ||
| 43 | #include "stdbas.messages.h" | 43 | #include "stdbas.messages.h" |
| 44 | #include "WixStandardBootstrapperApplication.h" | 44 | #include "WixStandardBootstrapperApplication.h" |
| 45 | |||
| 46 | HRESULT LoadBundleIcon( | ||
| 47 | __in HMODULE hModule, | ||
| 48 | __out HICON* phIcon, | ||
| 49 | __out HICON* phSmallIcon | ||
| 50 | ); | ||
diff --git a/src/ext/Bal/stdbas/stdbas.cpp b/src/ext/Bal/stdbas/stdbas.cpp new file mode 100644 index 00000000..909bdc23 --- /dev/null +++ b/src/ext/Bal/stdbas/stdbas.cpp | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | // 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. | ||
| 2 | |||
| 3 | #include "precomp.h" | ||
| 4 | |||
| 5 | static const LPCWSTR WIX_BUNDLE_ICON_FILENAME = L"WixBundle.ico"; | ||
| 6 | |||
| 7 | |||
| 8 | // | ||
| 9 | // LoadBundleIcon - loads the icon that was (optionally) authored in the bundle otherwise use the one embedded in the bootstrapper application. | ||
| 10 | // | ||
| 11 | HRESULT LoadBundleIcon( | ||
| 12 | __in HMODULE hModule, | ||
| 13 | __out HICON* phIcon, | ||
| 14 | __out HICON* phSmallIcon | ||
| 15 | ) | ||
| 16 | { | ||
| 17 | HRESULT hr = S_OK; | ||
| 18 | LPWSTR sczIconPath = NULL; | ||
| 19 | int nIconWidth = ::GetSystemMetrics(SM_CXICON); | ||
| 20 | int nIconHeight = ::GetSystemMetrics(SM_CYICON); | ||
| 21 | int nSmallIconWidth = ::GetSystemMetrics(SM_CXSMICON); | ||
| 22 | int nSmallIconHeight = ::GetSystemMetrics(SM_CYSMICON); | ||
| 23 | HICON hIcon = NULL; | ||
| 24 | HICON hSmallIcon = NULL; | ||
| 25 | |||
| 26 | // First look for the optional authored bundle icon. | ||
| 27 | hr = PathRelativeToModule(&sczIconPath, WIX_BUNDLE_ICON_FILENAME, hModule); | ||
| 28 | ExitOnFailure(hr, "Failed to get path to bundle icon: %ls", WIX_BUNDLE_ICON_FILENAME); | ||
| 29 | |||
| 30 | if (FileExistsEx(sczIconPath, NULL)) | ||
| 31 | { | ||
| 32 | hIcon = reinterpret_cast<HICON>(::LoadImageW(NULL, sczIconPath, IMAGE_ICON, nIconWidth, nIconHeight, LR_LOADFROMFILE)); | ||
| 33 | |||
| 34 | hSmallIcon = reinterpret_cast<HICON>(::LoadImageW(NULL, sczIconPath, IMAGE_ICON, nSmallIconWidth, nSmallIconHeight, LR_LOADFROMFILE)); | ||
| 35 | } | ||
| 36 | else // fallback to the first icon resource in the bootstrapper application. | ||
| 37 | { | ||
| 38 | hIcon = reinterpret_cast<HICON>(::LoadImageW(hModule, MAKEINTRESOURCEW(1), IMAGE_ICON, nIconWidth, nIconHeight, LR_DEFAULTCOLOR)); | ||
| 39 | |||
| 40 | hSmallIcon = reinterpret_cast<HICON>(::LoadImageW(hModule, MAKEINTRESOURCEW(1), IMAGE_ICON, nSmallIconWidth, nSmallIconHeight, LR_DEFAULTCOLOR)); | ||
| 41 | } | ||
| 42 | |||
| 43 | *phIcon = hIcon; | ||
| 44 | *phSmallIcon = hSmallIcon; | ||
| 45 | |||
| 46 | LExit: | ||
| 47 | ReleaseStr(sczIconPath); | ||
| 48 | |||
| 49 | return hr; | ||
| 50 | } | ||
diff --git a/src/ext/Bal/stdbas/stdbas.vcxproj b/src/ext/Bal/stdbas/stdbas.vcxproj index fb2b0682..ba990af7 100644 --- a/src/ext/Bal/stdbas/stdbas.vcxproj +++ b/src/ext/Bal/stdbas/stdbas.vcxproj | |||
| @@ -60,6 +60,7 @@ | |||
| 60 | <ClCompile Include="precomp.cpp"> | 60 | <ClCompile Include="precomp.cpp"> |
| 61 | <PrecompiledHeader>Create</PrecompiledHeader> | 61 | <PrecompiledHeader>Create</PrecompiledHeader> |
| 62 | </ClCompile> | 62 | </ClCompile> |
| 63 | <ClCompile Include="stdbas.cpp" /> | ||
| 63 | <ClCompile Include="WixInternalUIBootstrapperApplication.cpp" /> | 64 | <ClCompile Include="WixInternalUIBootstrapperApplication.cpp" /> |
| 64 | <ClCompile Include="WixStandardBootstrapperApplication.cpp" /> | 65 | <ClCompile Include="WixStandardBootstrapperApplication.cpp" /> |
| 65 | </ItemGroup> | 66 | </ItemGroup> |
| @@ -80,4 +81,4 @@ rc.exe -fo "$(OutDir)stdbas.res" "$(IntDir)stdbas.messages.rc"</Command> | |||
| 80 | </ItemGroup> | 81 | </ItemGroup> |
| 81 | 82 | ||
| 82 | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | 83 | <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
| 83 | </Project> | 84 | </Project> \ No newline at end of file |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/BalExtensionFixture.cs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/BalExtensionFixture.cs index 07d3dacb..e599b8e2 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/BalExtensionFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/BalExtensionFixture.cs | |||
| @@ -24,7 +24,8 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 24 | { | 24 | { |
| 25 | var baseFolder = fs.GetFolder(); | 25 | var baseFolder = fs.GetFolder(); |
| 26 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | 26 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); |
| 27 | var bundleSourceFolder = TestData.Get(@"TestData\WixStdBa"); | 27 | var bundleSourceFolder = TestData.Get(@"TestData", "WixStdBa"); |
| 28 | var dataFolder = TestData.Get(@"TestData", ".Data"); | ||
| 28 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 29 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 29 | var baFolderPath = Path.Combine(baseFolder, "ba"); | 30 | var baFolderPath = Path.Combine(baseFolder, "ba"); |
| 30 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | 31 | var extractFolderPath = Path.Combine(baseFolder, "extract"); |
| @@ -36,6 +37,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 36 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), | 37 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), |
| 37 | "-intermediateFolder", intermediateFolder, | 38 | "-intermediateFolder", intermediateFolder, |
| 38 | "-bindpath", Path.Combine(bundleSourceFolder, "data"), | 39 | "-bindpath", Path.Combine(bundleSourceFolder, "data"), |
| 40 | "-bindpath", dataFolder, | ||
| 39 | "-o", bundleFile, | 41 | "-o", bundleFile, |
| 40 | }); | 42 | }); |
| 41 | compileResult.AssertSuccess(); | 43 | compileResult.AssertSuccess(); |
| @@ -56,6 +58,46 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 56 | } | 58 | } |
| 57 | 59 | ||
| 58 | [TestMethod] | 60 | [TestMethod] |
| 61 | public void CanBuildUsingDisplayFilesInUseDialogCondition() | ||
| 62 | { | ||
| 63 | using (var fs = new DisposableFileSystem()) | ||
| 64 | { | ||
| 65 | var baseFolder = fs.GetFolder(); | ||
| 66 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | ||
| 67 | var bundleSourceFolder = TestData.Get(@"TestData", "WixStdBa"); | ||
| 68 | var dataFolder = TestData.Get(@"TestData", ".Data"); | ||
| 69 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 70 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 71 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 72 | |||
| 73 | var compileResult = WixRunner.Execute(new[] | ||
| 74 | { | ||
| 75 | "build", | ||
| 76 | Path.Combine(bundleSourceFolder, "DisplayFilesInUseDialogConditionBundle.wxs"), | ||
| 77 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), | ||
| 78 | "-intermediateFolder", intermediateFolder, | ||
| 79 | "-bindpath", Path.Combine(bundleSourceFolder, "data"), | ||
| 80 | "-bindpath", dataFolder, | ||
| 81 | "-o", bundleFile, | ||
| 82 | }); | ||
| 83 | compileResult.AssertSuccess(); | ||
| 84 | |||
| 85 | Assert.IsTrue(File.Exists(bundleFile)); | ||
| 86 | |||
| 87 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundleFile, baFolderPath, extractFolderPath); | ||
| 88 | extractResult.AssertSuccess(); | ||
| 89 | |||
| 90 | var balPackageInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixBalPackageInfo"); | ||
| 91 | WixAssert.CompareLineByLine(new string[] | ||
| 92 | { | ||
| 93 | "<WixBalPackageInfo PackageId='test.msi' DisplayFilesInUseDialogCondition='1' />", | ||
| 94 | }, balPackageInfos); | ||
| 95 | |||
| 96 | Assert.IsTrue(File.Exists(Path.Combine(baFolderPath, "thm.wxl"))); | ||
| 97 | } | ||
| 98 | } | ||
| 99 | |||
| 100 | [TestMethod] | ||
| 59 | public void CanBuildUsingBootstrapperApplicationId() | 101 | public void CanBuildUsingBootstrapperApplicationId() |
| 60 | { | 102 | { |
| 61 | using (var fs = new DisposableFileSystem()) | 103 | using (var fs = new DisposableFileSystem()) |
| @@ -63,6 +105,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 63 | var baseFolder = fs.GetFolder(); | 105 | var baseFolder = fs.GetFolder(); |
| 64 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | 106 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); |
| 65 | var bundleSourceFolder = TestData.Get("TestData", "WixStdBa"); | 107 | var bundleSourceFolder = TestData.Get("TestData", "WixStdBa"); |
| 108 | var dataFolder = TestData.Get(@"TestData", ".Data"); | ||
| 66 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 109 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 67 | var baFolderPath = Path.Combine(baseFolder, "ba"); | 110 | var baFolderPath = Path.Combine(baseFolder, "ba"); |
| 68 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | 111 | var extractFolderPath = Path.Combine(baseFolder, "extract"); |
| @@ -74,6 +117,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 74 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), | 117 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), |
| 75 | "-intermediateFolder", intermediateFolder, | 118 | "-intermediateFolder", intermediateFolder, |
| 76 | "-bindpath", Path.Combine(bundleSourceFolder, "data"), | 119 | "-bindpath", Path.Combine(bundleSourceFolder, "data"), |
| 120 | "-bindpath", dataFolder, | ||
| 77 | "-o", bundleFile, | 121 | "-o", bundleFile, |
| 78 | }); | 122 | }); |
| 79 | compileResult.AssertSuccess(); | 123 | compileResult.AssertSuccess(); |
| @@ -103,7 +147,8 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 103 | { | 147 | { |
| 104 | var baseFolder = fs.GetFolder(); | 148 | var baseFolder = fs.GetFolder(); |
| 105 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | 149 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); |
| 106 | var bundleSourceFolder = TestData.Get(@"TestData\Overridable"); | 150 | var bundleSourceFolder = TestData.Get(@"TestData", "Overridable"); |
| 151 | var dataFolder = TestData.Get(@"TestData", ".Data"); | ||
| 107 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 152 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 108 | var baFolderPath = Path.Combine(baseFolder, "ba"); | 153 | var baFolderPath = Path.Combine(baseFolder, "ba"); |
| 109 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | 154 | var extractFolderPath = Path.Combine(baseFolder, "extract"); |
| @@ -114,6 +159,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 114 | Path.Combine(bundleSourceFolder, "Bundle.wxs"), | 159 | Path.Combine(bundleSourceFolder, "Bundle.wxs"), |
| 115 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), | 160 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), |
| 116 | "-intermediateFolder", intermediateFolder, | 161 | "-intermediateFolder", intermediateFolder, |
| 162 | "-bindpath", dataFolder, | ||
| 117 | "-o", bundleFile, | 163 | "-o", bundleFile, |
| 118 | }); | 164 | }); |
| 119 | compileResult.AssertSuccess(); | 165 | compileResult.AssertSuccess(); |
| @@ -144,7 +190,8 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 144 | { | 190 | { |
| 145 | var baseFolder = fs.GetFolder(); | 191 | var baseFolder = fs.GetFolder(); |
| 146 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | 192 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); |
| 147 | var bundleSourceFolder = TestData.Get(@"TestData\WixStdBa"); | 193 | var bundleSourceFolder = TestData.Get(@"TestData", "WixStdBa"); |
| 194 | var dataFolder = TestData.Get(@"TestData", ".Data"); | ||
| 148 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 195 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 149 | 196 | ||
| 150 | var compileResult = WixRunner.Execute(new[] | 197 | var compileResult = WixRunner.Execute(new[] |
| @@ -153,6 +200,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 153 | Path.Combine(bundleSourceFolder, "Bundle.wxs"), | 200 | Path.Combine(bundleSourceFolder, "Bundle.wxs"), |
| 154 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), | 201 | "-ext", TestData.Get(@"WixToolset.BootstrapperApplications.wixext.dll"), |
| 155 | "-intermediateFolder", intermediateFolder, | 202 | "-intermediateFolder", intermediateFolder, |
| 203 | "-bindpath", dataFolder, | ||
| 156 | "-o", bundleFile, | 204 | "-o", bundleFile, |
| 157 | }); | 205 | }); |
| 158 | compileResult.AssertSuccess(); | 206 | compileResult.AssertSuccess(); |
| @@ -298,6 +346,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 298 | { | 346 | { |
| 299 | "bal:Condition/@Condition contains the built-in Variable 'WixBundleAction', which is not available when it is evaluated. (Unavailable Variables are: 'WixBundleAction'.). Rewrite the condition to avoid Variables that are never valid during its evaluation.", | 347 | "bal:Condition/@Condition contains the built-in Variable 'WixBundleAction', which is not available when it is evaluated. (Unavailable Variables are: 'WixBundleAction'.). Rewrite the condition to avoid Variables that are never valid during its evaluation.", |
| 300 | "Overridable variable 'TEST1' collides with 'Test1' with Bundle/@CommandLineVariables value 'caseInsensitive'.", | 348 | "Overridable variable 'TEST1' collides with 'Test1' with Bundle/@CommandLineVariables value 'caseInsensitive'.", |
| 349 | "The *Package/@bal:DisplayFilesInUseDialogCondition attribute's value '=' is not a valid bundle condition.", | ||
| 301 | "The *Package/@bal:DisplayInternalUICondition attribute's value '=' is not a valid bundle condition.", | 350 | "The *Package/@bal:DisplayInternalUICondition attribute's value '=' is not a valid bundle condition.", |
| 302 | "The location of the Variable related to the previous error.", | 351 | "The location of the Variable related to the previous error.", |
| 303 | }, messages.ToArray()); | 352 | }, messages.ToArray()); |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/InternalUIBAFixture.cs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/InternalUIBAFixture.cs index 72e31540..7b4d00fc 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/InternalUIBAFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/InternalUIBAFixture.cs | |||
| @@ -168,6 +168,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 168 | "WixInternalUIBootstrapperApplication does not support the value of 'force' for Cache on prereq packages. Prereq packages are only cached when they need to be installed.", | 168 | "WixInternalUIBootstrapperApplication does not support the value of 'force' for Cache on prereq packages. Prereq packages are only cached when they need to be installed.", |
| 169 | "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown.", | 169 | "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown.", |
| 170 | "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown.", | 170 | "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown.", |
| 171 | "WixInternalUIBootstrapperApplication ignores DisplayFilesInUseDialogCondition for the primary package so that the MSI UI is always shown.", | ||
| 171 | "When using WixInternalUIBootstrapperApplication, all prereq packages should be before the primary package in the chain. The prereq packages are always installed before the primary package.", | 172 | "When using WixInternalUIBootstrapperApplication, all prereq packages should be before the primary package in the chain. The prereq packages are always installed before the primary package.", |
| 172 | }, compileResult.Messages.Select(m => m.ToString()).ToArray()); | 173 | }, compileResult.Messages.Select(m => m.ToString()).ToArray()); |
| 173 | 174 | ||
| @@ -181,7 +182,7 @@ namespace WixToolsetTest.BootstrapperApplications | |||
| 181 | var balPackageInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixBalPackageInfo"); | 182 | var balPackageInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixBalPackageInfo"); |
| 182 | WixAssert.CompareLineByLine(new string[] | 183 | WixAssert.CompareLineByLine(new string[] |
| 183 | { | 184 | { |
| 184 | "<WixBalPackageInfo PackageId='test.msi' DisplayInternalUICondition='DISPLAYTEST' PrimaryPackageType='default' />", | 185 | "<WixBalPackageInfo PackageId='test.msi' DisplayInternalUICondition='DISPLAYTEST' DisplayFilesInUseDialogCondition='DISPLAYTEST' PrimaryPackageType='default' />", |
| 185 | }, balPackageInfos); | 186 | }, balPackageInfos); |
| 186 | 187 | ||
| 187 | var mbaPrereqInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixPrereqInformation"); | 188 | var mbaPrereqInfos = extractResult.GetBADataTestXmlLines("/ba:BootstrapperApplicationData/ba:WixPrereqInformation"); |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/.Data/test.ico b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/.Data/test.ico new file mode 100644 index 00000000..906ce324 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/.Data/test.ico | |||
| Binary files differ | |||
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/Overridable/WrongCaseBundle.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/Overridable/WrongCaseBundle.wxs index 67dfc589..33b2d64c 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/Overridable/WrongCaseBundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/Overridable/WrongCaseBundle.wxs | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | <Variable Name="TEST1" bal:Overridable="yes" /> | 9 | <Variable Name="TEST1" bal:Overridable="yes" /> |
| 10 | <Chain> | 10 | <Chain> |
| 11 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> | 11 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> |
| 12 | <MsiPackage SourceFile="test.msi" bal:DisplayInternalUICondition="!(loc.NonsensePlanCondition)" /> | 12 | <MsiPackage SourceFile="test.msi" bal:DisplayInternalUICondition="!(loc.NonsensePlanCondition)" bal:DisplayFilesInUseDialogCondition="!(loc.NonsensePlanCondition)" /> |
| 13 | </Chain> | 13 | </Chain> |
| 14 | <bal:Condition Condition="!(loc.NonsenseDetectCondition)" Message="Unsupported" /> | 14 | <bal:Condition Condition="!(loc.NonsenseDetectCondition)" Message="Unsupported" /> |
| 15 | </Bundle> | 15 | </Bundle> |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixIuiBa/IuibaWarnings.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixIuiBa/IuibaWarnings.wxs index 2cf9787d..9c9aa0f8 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixIuiBa/IuibaWarnings.wxs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixIuiBa/IuibaWarnings.wxs | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | <bal:WixInternalUIBootstrapperApplication /> | 6 | <bal:WixInternalUIBootstrapperApplication /> |
| 7 | </BootstrapperApplication> | 7 | </BootstrapperApplication> |
| 8 | <Chain> | 8 | <Chain> |
| 9 | <MsiPackage SourceFile="test.msi" InstallCondition="INSTALLTEST" bal:DisplayInternalUICondition="DISPLAYTEST" /> | 9 | <MsiPackage SourceFile="test.msi" InstallCondition="INSTALLTEST" bal:DisplayInternalUICondition="DISPLAYTEST" bal:DisplayFilesInUseDialogCondition="DISPLAYTEST" /> |
| 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" Cache="force" /> | 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" Cache="force" /> |
| 11 | </Chain> | 11 | </Chain> |
| 12 | </Bundle> | 12 | </Bundle> |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/BootstrapperApplicationId.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/BootstrapperApplicationId.wxs index e1945f53..44c15999 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/BootstrapperApplicationId.wxs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/BootstrapperApplicationId.wxs | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" |
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> |
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2"> | 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2" |
| 5 | IconSourceFile="test.ico"> | ||
| 5 | <BootstrapperApplication Id="Custom"> | 6 | <BootstrapperApplication Id="Custom"> |
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | 7 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> |
| 7 | </BootstrapperApplication> | 8 | </BootstrapperApplication> |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/Bundle.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/Bundle.wxs index c17b53ff..e0346900 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/Bundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/Bundle.wxs | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" |
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> |
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2"> | 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2" |
| 5 | IconSourceFile="test.ico"> | ||
| 5 | <BootstrapperApplication> | 6 | <BootstrapperApplication> |
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | 7 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> |
| 7 | </BootstrapperApplication> | 8 | </BootstrapperApplication> |
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayFilesInUseDialogConditionBundle.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayFilesInUseDialogConditionBundle.wxs new file mode 100644 index 00000000..098d6f83 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayFilesInUseDialogConditionBundle.wxs | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2" | ||
| 5 | IconSourceFile="test.ico"> | ||
| 6 | <BootstrapperApplication> | ||
| 7 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | ||
| 8 | </BootstrapperApplication> | ||
| 9 | <Chain> | ||
| 10 | <MsiPackage SourceFile="test.msi" bal:DisplayFilesInUseDialogCondition="1" /> | ||
| 11 | </Chain> | ||
| 12 | </Bundle> | ||
| 13 | </Wix> | ||
diff --git a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayInternalUIConditionBundle.wxs b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayInternalUIConditionBundle.wxs index f08cfe6a..2dea66fd 100644 --- a/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayInternalUIConditionBundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.BootstrapperApplications/TestData/WixStdBa/DisplayInternalUIConditionBundle.wxs | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" |
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> |
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2"> | 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2" |
| 5 | IconSourceFile="test.ico"> | ||
| 5 | <BootstrapperApplication> | 6 | <BootstrapperApplication> |
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | 7 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> |
| 7 | </BootstrapperApplication> | 8 | </BootstrapperApplication> |
diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs index 82195549..5831bb8a 100644 --- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs +++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs | |||
| @@ -51,6 +51,11 @@ namespace WixToolset.BootstrapperApplications | |||
| 51 | writer.WriteAttributeString("DisplayInternalUICondition", balPackageInfoSymbol.DisplayInternalUICondition); | 51 | writer.WriteAttributeString("DisplayInternalUICondition", balPackageInfoSymbol.DisplayInternalUICondition); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null) | ||
| 55 | { | ||
| 56 | writer.WriteAttributeString("DisplayFilesInUseDialogCondition", balPackageInfoSymbol.DisplayFilesInUseDialogCondition); | ||
| 57 | } | ||
| 58 | |||
| 54 | if (balPackageInfoSymbol.PrimaryPackageType != BalPrimaryPackageType.None) | 59 | if (balPackageInfoSymbol.PrimaryPackageType != BalPrimaryPackageType.None) |
| 55 | { | 60 | { |
| 56 | writer.WriteAttributeString("PrimaryPackageType", balPackageInfoSymbol.PrimaryPackageType.ToString().ToLower()); | 61 | writer.WriteAttributeString("PrimaryPackageType", balPackageInfoSymbol.PrimaryPackageType.ToString().ToLower()); |
| @@ -104,6 +109,7 @@ namespace WixToolset.BootstrapperApplications | |||
| 104 | 109 | ||
| 105 | this.VerifyBalConditions(section); | 110 | this.VerifyBalConditions(section); |
| 106 | this.VerifyDisplayInternalUICondition(section); | 111 | this.VerifyDisplayInternalUICondition(section); |
| 112 | this.VerifyDisplayFilesInUseDialogCondition(section); | ||
| 107 | this.VerifyOverridableVariables(section); | 113 | this.VerifyOverridableVariables(section); |
| 108 | 114 | ||
| 109 | var balBaSymbol = section.Symbols.OfType<WixBalBootstrapperApplicationSymbol>().SingleOrDefault(); | 115 | var balBaSymbol = section.Symbols.OfType<WixBalBootstrapperApplicationSymbol>().SingleOrDefault(); |
| @@ -195,6 +201,17 @@ namespace WixToolset.BootstrapperApplications | |||
| 195 | } | 201 | } |
| 196 | } | 202 | } |
| 197 | 203 | ||
| 204 | private void VerifyDisplayFilesInUseDialogCondition(IntermediateSection section) | ||
| 205 | { | ||
| 206 | foreach (var balPackageInfoSymbol in section.Symbols.OfType<WixBalPackageInfoSymbol>().ToList()) | ||
| 207 | { | ||
| 208 | if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null) | ||
| 209 | { | ||
| 210 | this.BackendHelper.ValidateBundleCondition(balPackageInfoSymbol.SourceLineNumbers, "*Package", "bal:DisplayFilesInUseDialogCondition", balPackageInfoSymbol.DisplayFilesInUseDialogCondition, BundleConditionPhase.Plan); | ||
| 211 | } | ||
| 212 | } | ||
| 213 | } | ||
| 214 | |||
| 198 | private void VerifyPrimaryPackages(IntermediateSection section, SourceLineNumber baSourceLineNumbers) | 215 | private void VerifyPrimaryPackages(IntermediateSection section, SourceLineNumber baSourceLineNumbers) |
| 199 | { | 216 | { |
| 200 | WixBalPackageInfoSymbol defaultPrimaryPackage = null; | 217 | WixBalPackageInfoSymbol defaultPrimaryPackage = null; |
| @@ -420,6 +437,11 @@ namespace WixToolset.BootstrapperApplications | |||
| 420 | { | 437 | { |
| 421 | this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayInternalUICondition(packageSymbol.SourceLineNumbers)); | 438 | this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayInternalUICondition(packageSymbol.SourceLineNumbers)); |
| 422 | } | 439 | } |
| 440 | |||
| 441 | if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null) | ||
| 442 | { | ||
| 443 | this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayFilesInUseDialogCondition(packageSymbol.SourceLineNumbers)); | ||
| 444 | } | ||
| 423 | } | 445 | } |
| 424 | 446 | ||
| 425 | private void VerifyOverridableVariables(IntermediateSection section) | 447 | private void VerifyOverridableVariables(IntermediateSection section) |
diff --git a/src/ext/Bal/wixext/BalCompiler.cs b/src/ext/Bal/wixext/BalCompiler.cs index 35c86233..b7d5f679 100644 --- a/src/ext/Bal/wixext/BalCompiler.cs +++ b/src/ext/Bal/wixext/BalCompiler.cs | |||
| @@ -200,6 +200,20 @@ namespace WixToolset.BootstrapperApplications | |||
| 200 | break; | 200 | break; |
| 201 | } | 201 | } |
| 202 | break; | 202 | break; |
| 203 | case "DisplayFilesInUseDialogCondition": | ||
| 204 | switch (parentElement.Name.LocalName) | ||
| 205 | { | ||
| 206 | case "MsiPackage": | ||
| 207 | case "MspPackage": | ||
| 208 | var displayFilesInUseDialogCondition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attribute); | ||
| 209 | var packageInfo = this.GetBalPackageInfoSymbol(section, sourceLineNumbers, packageId); | ||
| 210 | packageInfo.DisplayFilesInUseDialogCondition = displayFilesInUseDialogCondition; | ||
| 211 | break; | ||
| 212 | default: | ||
| 213 | this.ParseHelper.UnexpectedAttribute(parentElement, attribute); | ||
| 214 | break; | ||
| 215 | } | ||
| 216 | break; | ||
| 203 | case "PrimaryPackageType": | 217 | case "PrimaryPackageType": |
| 204 | { | 218 | { |
| 205 | var primaryPackageType = BalPrimaryPackageType.None; | 219 | var primaryPackageType = BalPrimaryPackageType.None; |
diff --git a/src/ext/Bal/wixext/BalWarnings.cs b/src/ext/Bal/wixext/BalWarnings.cs index 8c5d892f..f86837f9 100644 --- a/src/ext/Bal/wixext/BalWarnings.cs +++ b/src/ext/Bal/wixext/BalWarnings.cs | |||
| @@ -23,6 +23,11 @@ namespace WixToolset.BootstrapperApplications | |||
| 23 | return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayInternalUICondition, "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown."); | 23 | return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayInternalUICondition, "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown."); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | public static Message IuibaPrimaryPackageDisplayFilesInUseDialogCondition(SourceLineNumber sourceLineNumbers) | ||
| 27 | { | ||
| 28 | return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayFilesInUseDialogCondition, "WixInternalUIBootstrapperApplication ignores DisplayFilesInUseDialogCondition for the primary package so that the MSI UI is always shown."); | ||
| 29 | } | ||
| 30 | |||
| 26 | public static Message IuibaPrimaryPackageInstallCondition(SourceLineNumber sourceLineNumbers) | 31 | public static Message IuibaPrimaryPackageInstallCondition(SourceLineNumber sourceLineNumbers) |
| 27 | { | 32 | { |
| 28 | return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageInstallCondition, "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown."); | 33 | return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageInstallCondition, "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown."); |
| @@ -56,6 +61,7 @@ namespace WixToolset.BootstrapperApplications | |||
| 56 | IuibaPrimaryPackageDisplayInternalUICondition = 6504, | 61 | IuibaPrimaryPackageDisplayInternalUICondition = 6504, |
| 57 | IuibaPrereqPackageAfterPrimaryPackage = 6505, | 62 | IuibaPrereqPackageAfterPrimaryPackage = 6505, |
| 58 | DeprecatedBAFactoryAssemblyAttribute = 6506, | 63 | DeprecatedBAFactoryAssemblyAttribute = 6506, |
| 64 | IuibaPrimaryPackageDisplayFilesInUseDialogCondition = 6507, | ||
| 59 | } | 65 | } |
| 60 | } | 66 | } |
| 61 | } | 67 | } |
diff --git a/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs b/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs index e2636d33..6e90c2b9 100644 --- a/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs +++ b/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs | |||
| @@ -14,6 +14,7 @@ namespace WixToolset.BootstrapperApplications | |||
| 14 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PackageId), IntermediateFieldType.String), | 14 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PackageId), IntermediateFieldType.String), |
| 15 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayInternalUICondition), IntermediateFieldType.String), | 15 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayInternalUICondition), IntermediateFieldType.String), |
| 16 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PrimaryPackageType), IntermediateFieldType.Number), | 16 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PrimaryPackageType), IntermediateFieldType.Number), |
| 17 | new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition), IntermediateFieldType.String), | ||
| 17 | }, | 18 | }, |
| 18 | typeof(WixBalPackageInfoSymbol)); | 19 | typeof(WixBalPackageInfoSymbol)); |
| 19 | } | 20 | } |
| @@ -28,6 +29,7 @@ namespace WixToolset.BootstrapperApplications.Symbols | |||
| 28 | PackageId, | 29 | PackageId, |
| 29 | DisplayInternalUICondition, | 30 | DisplayInternalUICondition, |
| 30 | PrimaryPackageType, | 31 | PrimaryPackageType, |
| 32 | DisplayFilesInUseDialogCondition, | ||
| 31 | } | 33 | } |
| 32 | 34 | ||
| 33 | public enum BalPrimaryPackageType | 35 | public enum BalPrimaryPackageType |
| @@ -68,5 +70,11 @@ namespace WixToolset.BootstrapperApplications.Symbols | |||
| 68 | get => (BalPrimaryPackageType)this.Fields[(int)WixBalPackageInfoSymbolFields.PrimaryPackageType].AsNumber(); | 70 | get => (BalPrimaryPackageType)this.Fields[(int)WixBalPackageInfoSymbolFields.PrimaryPackageType].AsNumber(); |
| 69 | set => this.Set((int)WixBalPackageInfoSymbolFields.PrimaryPackageType, (int)value); | 71 | set => this.Set((int)WixBalPackageInfoSymbolFields.PrimaryPackageType, (int)value); |
| 70 | } | 72 | } |
| 73 | |||
| 74 | public string DisplayFilesInUseDialogCondition | ||
| 75 | { | ||
| 76 | get => this.Fields[(int)WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition].AsString(); | ||
| 77 | set => this.Set((int)WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition, value); | ||
| 78 | } | ||
| 71 | } | 79 | } |
| 72 | } | 80 | } |
diff --git a/src/ext/UI/wixlib/WixUI_uk-UA.wxl b/src/ext/UI/wixlib/WixUI_uk-UA.wxl index d27f226e..645b6eee 100644 --- a/src/ext/UI/wixlib/WixUI_uk-UA.wxl +++ b/src/ext/UI/wixlib/WixUI_uk-UA.wxl | |||
| @@ -17,8 +17,8 @@ | |||
| 17 | <String Id="AdvancedWelcomeEulaDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 17 | <String Id="AdvancedWelcomeEulaDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 18 | <String Id="AdvancedWelcomeEulaDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}ОзнайомтеÑÑ Ð· ліцензійною угодою Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 18 | <String Id="AdvancedWelcomeEulaDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}ОзнайомтеÑÑ Ð· ліцензійною угодою Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 19 | <String Id="AdvancedWelcomeEulaDlgLicenseAcceptedCheckBox" Overridable="yes" Value="Я &приймаю умови ліцензійної угоди" /> | 19 | <String Id="AdvancedWelcomeEulaDlgLicenseAcceptedCheckBox" Overridable="yes" Value="Я &приймаю умови ліцензійної угоди" /> |
| 20 | <String Id="AdvancedWelcomeEulaDlgDescriptionPerMachine" Overridable="yes" Value="Щоб інÑталювати продукт із параметрами за промовчаннÑм Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів, натиÑніть кнопку "ІнÑталювати". Щоб змінити параметри інÑталÑції, натиÑніть кнопку "Додатково"." /> | 20 | <String Id="AdvancedWelcomeEulaDlgDescriptionPerMachine" Overridable="yes" Value="Щоб інÑталювати продукт із параметрами за замовчуваннÑм Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів, натиÑніть кнопку "ІнÑталювати". Щоб змінити параметри інÑталÑції, натиÑніть кнопку "Додатково"." /> |
| 21 | <String Id="AdvancedWelcomeEulaDlgDescriptionPerUser" Overridable="yes" Value="Щоб інÑталювати продукт із параметрами за промовчаннÑм Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів, натиÑніть кнопку "ІнÑталювати". Щоб змінити параметри інÑталÑції, натиÑніть кнопку "Додатково"." /> | 21 | <String Id="AdvancedWelcomeEulaDlgDescriptionPerUser" Overridable="yes" Value="Щоб інÑталювати продукт із параметрами за замовчуваннÑм Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів, натиÑніть кнопку "ІнÑталювати". Щоб змінити параметри інÑталÑції, натиÑніть кнопку "Додатково"." /> |
| 22 | <String Id="AdvancedWelcomeEulaDlgInstall" Overridable="yes" Value="&ІнÑталювати" /> | 22 | <String Id="AdvancedWelcomeEulaDlgInstall" Overridable="yes" Value="&ІнÑталювати" /> |
| 23 | <String Id="AdvancedWelcomeEulaDlgAdvanced" Overridable="yes" Value="Д&одатково" /> | 23 | <String Id="AdvancedWelcomeEulaDlgAdvanced" Overridable="yes" Value="Д&одатково" /> |
| 24 | <String Id="Advanced_Font_Normal_Size" Overridable="yes" Value="8" /> | 24 | <String Id="Advanced_Font_Normal_Size" Overridable="yes" Value="8" /> |
| @@ -49,8 +49,8 @@ | |||
| 49 | <String Id="CustomizeDlgReset" Overridable="yes" Value="&СкиданнÑ" /> | 49 | <String Id="CustomizeDlgReset" Overridable="yes" Value="&СкиданнÑ" /> |
| 50 | <String Id="CustomizeDlgDiskCost" Overridable="yes" Value="ВикориÑÑ‚Ð°Ð½Ð½Ñ &диÑкового проÑтору" /> | 50 | <String Id="CustomizeDlgDiskCost" Overridable="yes" Value="ВикориÑÑ‚Ð°Ð½Ð½Ñ &диÑкового проÑтору" /> |
| 51 | <String Id="CustomizeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 51 | <String Id="CustomizeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 52 | <String Id="CustomizeDlgText" Overridable="yes" Value="СпоÑіб інÑталÑції компонентів можна змінити, клацаючи піктограми в дереві нижче." /> | 52 | <String Id="CustomizeDlgText" Overridable="yes" Value="СпоÑіб інÑталÑції компонентів можна змінити, натиÑкаючи піктограми в дереві нижче." /> |
| 53 | <String Id="CustomizeDlgDescription" Overridable="yes" Value="Виберіть ÑпоÑіб інÑталÑції компонентів." /> | 53 | <String Id="CustomizeDlgDescription" Overridable="yes" Value="Оберіть ÑпоÑіб інÑталÑції компонентів." /> |
| 54 | <String Id="CustomizeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вибіркова інÑталÑціÑ" /> | 54 | <String Id="CustomizeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вибіркова інÑталÑціÑ" /> |
| 55 | <String Id="CustomizeDlgItemDescription" Overridable="yes" Value="CustomizeDlgItemDescription-CustomizeDlgItemDescription" /> | 55 | <String Id="CustomizeDlgItemDescription" Overridable="yes" Value="CustomizeDlgItemDescription-CustomizeDlgItemDescription" /> |
| 56 | <String Id="CustomizeDlgItemSize" Overridable="yes" Value="CustomizeDlgItemSize-CustomizeDlgItemSize" /> | 56 | <String Id="CustomizeDlgItemSize" Overridable="yes" Value="CustomizeDlgItemSize-CustomizeDlgItemSize" /> |
| @@ -59,8 +59,8 @@ | |||
| 59 | 59 | ||
| 60 | <String Id="DiskCostDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 60 | <String Id="DiskCostDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 61 | <String Id="DiskCostDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 61 | <String Id="DiskCostDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 62 | <String Id="DiskCostDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції вибраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або вибрати інші диÑки призначеннÑ." /> | 62 | <String Id="DiskCostDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції обраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або вибрати інші диÑки призначеннÑ." /> |
| 63 | <String Id="DiskCostDlgDescription" Overridable="yes" Value="ДиÑковий проÑтір, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції вибраних компонентів." /> | 63 | <String Id="DiskCostDlgDescription" Overridable="yes" Value="ДиÑковий проÑтір, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції обраних компонентів." /> |
| 64 | <String Id="DiskCostDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вимоги до диÑкового проÑтору" /> | 64 | <String Id="DiskCostDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вимоги до диÑкового проÑтору" /> |
| 65 | <String Id="DiskCostDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> | 65 | <String Id="DiskCostDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> |
| 66 | 66 | ||
| @@ -83,7 +83,7 @@ | |||
| 83 | <String Id="FeaturesDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 83 | <String Id="FeaturesDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 84 | <String Id="FeaturesDlgTree" Overridable="yes" Value="Компоненти продукту" /> | 84 | <String Id="FeaturesDlgTree" Overridable="yes" Value="Компоненти продукту" /> |
| 85 | <String Id="FeaturesDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 85 | <String Id="FeaturesDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 86 | <String Id="FeaturesDlgDescription" Overridable="yes" Value="Виберіть ÑпоÑіб інÑталÑції компонентів." /> | 86 | <String Id="FeaturesDlgDescription" Overridable="yes" Value="Оберіть ÑпоÑіб інÑталÑції компонентів." /> |
| 87 | <String Id="FeaturesDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Компоненти продукту" /> | 87 | <String Id="FeaturesDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Компоненти продукту" /> |
| 88 | <String Id="FeaturesDlgItemDescription" Overridable="yes" Value="FeaturesDlgItemDescription" /> | 88 | <String Id="FeaturesDlgItemDescription" Overridable="yes" Value="FeaturesDlgItemDescription" /> |
| 89 | <String Id="FeaturesDlgItemSize" Overridable="yes" Value="FeaturesDlgItemSize" /> | 89 | <String Id="FeaturesDlgItemSize" Overridable="yes" Value="FeaturesDlgItemSize" /> |
| @@ -93,14 +93,14 @@ | |||
| 93 | <String Id="FilesInUse_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 93 | <String Id="FilesInUse_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 94 | <String Id="FilesInUseExit" Overridable="yes" Value="Ви&хід" /> | 94 | <String Id="FilesInUseExit" Overridable="yes" Value="Ви&хід" /> |
| 95 | <String Id="FilesInUseBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 95 | <String Id="FilesInUseBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 96 | <String Id="FilesInUseText" Overridable="yes" Value="Ðаведені нижче заÑтоÑунки викориÑтовують файли, Ñкі підлÑгають оновленню під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. Закривши ці заÑтоÑунки, натиÑніть кнопку "&Повторити", щоб продовжити інÑталÑцію, або кнопку "Закрити", щоб припинити Ñ—Ñ—." /> | 96 | <String Id="FilesInUseText" Overridable="yes" Value="Ðаведені нижче додатки викориÑтовують файли, що підлÑгають оновленню під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції. Закривши ці додатки, натиÑніть кнопку "&Повторити", щоб продовжити інÑталÑцію, або кнопку "Закрити", щоб припинити Ñ—Ñ—." /> |
| 97 | <String Id="FilesInUseDescription" Overridable="yes" Value="ДеÑкі файли, що підлÑгають оновленню, зараз викориÑтовуютьÑÑ." /> | 97 | <String Id="FilesInUseDescription" Overridable="yes" Value="ДеÑкі файли, що підлÑгають оновленню, зараз викориÑтовуютьÑÑ." /> |
| 98 | <String Id="FilesInUseTitle" Overridable="yes" Value="{\WixUI_Font_Title}Файли, Ñкі викориÑтовуютьÑÑ" /> | 98 | <String Id="FilesInUseTitle" Overridable="yes" Value="{\WixUI_Font_Title}Файли, Ñкі викориÑтовуютьÑÑ" /> |
| 99 | 99 | ||
| 100 | <String Id="InstallDirDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 100 | <String Id="InstallDirDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 101 | <String Id="InstallDirDlgChange" Overridable="yes" Value="&Змінити..." /> | 101 | <String Id="InstallDirDlgChange" Overridable="yes" Value="&Змінити..." /> |
| 102 | <String Id="InstallDirDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Папка призначеннÑ" /> | 102 | <String Id="InstallDirDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Папка призначеннÑ" /> |
| 103 | <String Id="InstallDirDlgDescription" Overridable="yes" Value="Ð”Ð»Ñ Ñ–Ð½ÑталÑції в папку за промовчаннÑм натиÑніть кнопку "Далі"; щоб вибрати іншу папку, натиÑніть кнопку "Змінити"." /> | 103 | <String Id="InstallDirDlgDescription" Overridable="yes" Value="Ð”Ð»Ñ Ñ–Ð½ÑталÑції в папку за замовчуваннÑм натиÑніть кнопку "Далі"; щоб вибрати іншу папку, натиÑніть кнопку "Змінити"." /> |
| 104 | <String Id="InstallDirDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 104 | <String Id="InstallDirDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 105 | <String Id="InstallDirDlgFolderLabel" Overridable="yes" Value="Папка Ð´Ð»Ñ Ñ–Ð½ÑталÑції програми [ProductName]:" /> | 105 | <String Id="InstallDirDlgFolderLabel" Overridable="yes" Value="Папка Ð´Ð»Ñ Ñ–Ð½ÑталÑції програми [ProductName]:" /> |
| 106 | 106 | ||
| @@ -108,16 +108,16 @@ | |||
| 108 | <String Id="InstallScopeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 108 | <String Id="InstallScopeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 109 | <String Id="InstallScopeDlgDescription" Overridable="yes" Value="Вибір типу й папки Ð´Ð»Ñ Ñ–Ð½ÑталÑції" /> | 109 | <String Id="InstallScopeDlgDescription" Overridable="yes" Value="Вибір типу й папки Ð´Ð»Ñ Ñ–Ð½ÑталÑції" /> |
| 110 | <String Id="InstallScopeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Тип інÑталÑції" /> | 110 | <String Id="InstallScopeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Тип інÑталÑції" /> |
| 111 | <String Id="InstallScopeDlgPerUser" Overridable="yes" Value="{\WixUI_Font_Emphasized}ІнÑталювати &лише Ð´Ð»Ñ Ñебе ([LogonUser])" /> | 111 | <String Id="InstallScopeDlgPerUser" Overridable="yes" Value="{\WixUI_Font_Emphasized}ІнÑталювати &Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ кориÑтувача ([LogonUser])" /> |
| 112 | <String Id="InstallScopeDlgPerUserDescription" Overridable="yes" Value="[ProductName] буде інÑтальовано в папку на рівні кориÑтувача; доÑтуп буде можливий лише з вашого облікового запиÑу кориÑтувача. Права локального адмініÑтратора не потрібні." /> | 112 | <String Id="InstallScopeDlgPerUserDescription" Overridable="yes" Value="[ProductName] буде інÑтальовано в папку на рівні кориÑтувача; доÑтуп буде можливий лише з вашого облікового запиÑу кориÑтувача. Права локального адмініÑтратора не потрібні." /> |
| 113 | <String Id="InstallScopeDlgNoPerUserDescription" Overridable="yes" Value="[ProductName] не підтримує інÑталÑції на рівні кориÑтувача." /> | 113 | <String Id="InstallScopeDlgNoPerUserDescription" Overridable="yes" Value="[ProductName] не підтримує інÑталÑції на рівні кориÑтувача." /> |
| 114 | <String Id="InstallScopeDlgPerMachine" Overridable="yes" Value="{\WixUI_Font_Emphasized}ІнÑталювати Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів цього &комп’ютера" /> | 114 | <String Id="InstallScopeDlgPerMachine" Overridable="yes" Value="{\WixUI_Font_Emphasized}ІнÑталювати Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів цього &комп’ютеру" /> |
| 115 | <String Id="InstallScopeDlgPerMachineDescription" Overridable="yes" Value="[ProductName] буде інÑтальовано в папку за промовчаннÑм на рівні комп’ютера; доÑтуп буде можливий Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів. Папку за промовчаннÑм Ð´Ð»Ñ Ñ–Ð½ÑталÑції можна змінити. Вам необхідні права локального адмініÑтратора." /> | 115 | <String Id="InstallScopeDlgPerMachineDescription" Overridable="yes" Value="[ProductName] буде інÑтальовано в папку за замовчуваннÑм на рівні комп’ютеру; доÑтуп буде можливий Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів. Папку за замовчуваннÑм Ð´Ð»Ñ Ñ–Ð½ÑталÑції можна змінити. Вам необхідні права локального адмініÑтратора." /> |
| 116 | <String Id="InstallScopeDlgFolderLabel" Overridable="yes" Value="&Папка Ð´Ð»Ñ Ñ–Ð½ÑталÑції:" /> | 116 | <String Id="InstallScopeDlgFolderLabel" Overridable="yes" Value="&Папка Ð´Ð»Ñ Ñ–Ð½ÑталÑції:" /> |
| 117 | <String Id="InstallScopeDlgChange" Overridable="yes" Value="&Змінити..." /> | 117 | <String Id="InstallScopeDlgChange" Overridable="yes" Value="&Змінити..." /> |
| 118 | 118 | ||
| 119 | <String Id="InvalidDirDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 119 | <String Id="InvalidDirDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 120 | <String Id="InvalidDirDlgText" Overridable="yes" Value="Каталог Ð´Ð»Ñ Ñ–Ð½ÑталÑції має міÑтитиÑÑ Ð½Ð° локальному жорÑткому диÑку." /> | 120 | <String Id="InvalidDirDlgText" Overridable="yes" Value="Каталог Ð´Ð»Ñ Ñ–Ð½ÑталÑції має міÑтитиÑÑŒ на локальному жорÑткому диÑку." /> |
| 121 | <String Id="InvalidDirDlgIcon" Overridable="yes" Value="WixUI_Ico_Info" /> | 121 | <String Id="InvalidDirDlgIcon" Overridable="yes" Value="WixUI_Ico_Info" /> |
| 122 | <String Id="InvalidDirDlgIconTooltip" Overridable="yes" Value="Піктограма відомоÑтей" /> | 122 | <String Id="InvalidDirDlgIconTooltip" Overridable="yes" Value="Піктограма відомоÑтей" /> |
| 123 | 123 | ||
| @@ -135,10 +135,10 @@ | |||
| 135 | <String Id="MaintenanceTypeDlgRemoveButton" Overridable="yes" Value="&Видалити" /> | 135 | <String Id="MaintenanceTypeDlgRemoveButton" Overridable="yes" Value="&Видалити" /> |
| 136 | <String Id="MaintenanceTypeDlgRemoveButtonTooltip" Overridable="yes" Value="Видалити інÑталÑцію" /> | 136 | <String Id="MaintenanceTypeDlgRemoveButtonTooltip" Overridable="yes" Value="Видалити інÑталÑцію" /> |
| 137 | <String Id="MaintenanceTypeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 137 | <String Id="MaintenanceTypeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 138 | <String Id="MaintenanceTypeDlgDescription" Overridable="yes" Value="Виберіть операцію, Ñку потрібно виконати." /> | 138 | <String Id="MaintenanceTypeDlgDescription" Overridable="yes" Value="Оберіть операцію, Ñку потрібно виконати." /> |
| 139 | <String Id="MaintenanceTypeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Змінити, відновити або видалити інÑталÑцію" /> | 139 | <String Id="MaintenanceTypeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Змінити, відновити або видалити інÑталÑцію" /> |
| 140 | <String Id="MaintenanceTypeDlgChangeText" Overridable="yes" Value="Дає змогу змінити ÑпоÑіб інÑталÑції компонентів." /> | 140 | <String Id="MaintenanceTypeDlgChangeText" Overridable="yes" Value="Дає змогу змінити ÑпоÑіб інÑталÑції компонентів." /> |
| 141 | <String Id="MaintenanceTypeDlgChangeDisabledText" Overridable="yes" Value="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName] немає компонентів, Ñкі можна вибрати окремо." /> | 141 | <String Id="MaintenanceTypeDlgChangeDisabledText" Overridable="yes" Value="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName] немає компонентів, Ñкі можна обрати окремо." /> |
| 142 | <String Id="MaintenanceTypeDlgRemoveText" Overridable="yes" Value="ВидалÑÑ” [ProductName] з комп’ютера." /> | 142 | <String Id="MaintenanceTypeDlgRemoveText" Overridable="yes" Value="ВидалÑÑ” [ProductName] з комп’ютера." /> |
| 143 | <String Id="MaintenanceTypeDlgRemoveDisabledText" Overridable="yes" Value="Ðе можна видалити програму [ProductName]." /> | 143 | <String Id="MaintenanceTypeDlgRemoveDisabledText" Overridable="yes" Value="Ðе можна видалити програму [ProductName]." /> |
| 144 | <String Id="MaintenanceTypeDlgRepairText" Overridable="yes" Value="ВиправлÑÑ” помилки оÑтанньої інÑталÑції, відновлюючи втрачені або пошкоджені файли, Ñрлики й запиÑи реєÑтру." /> | 144 | <String Id="MaintenanceTypeDlgRepairText" Overridable="yes" Value="ВиправлÑÑ” помилки оÑтанньої інÑталÑції, відновлюючи втрачені або пошкоджені файли, Ñрлики й запиÑи реєÑтру." /> |
| @@ -151,26 +151,26 @@ | |||
| 151 | 151 | ||
| 152 | <String Id="MsiRMFilesInUse_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 152 | <String Id="MsiRMFilesInUse_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 153 | <String Id="MsiRMFilesInUseBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 153 | <String Id="MsiRMFilesInUseBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 154 | <String Id="MsiRMFilesInUseText" Overridable="yes" Value="Ðаведені нижче заÑтоÑунки викориÑтовують файли, Ñкі підлÑгають оновленню під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. Можна дозволити майÑтру інÑталÑції закрити та Ñпробувати перезапуÑтити Ñ—Ñ… або перезавантажити комп’ютер пізніше." /> | 154 | <String Id="MsiRMFilesInUseText" Overridable="yes" Value="Ðаведені нижче додатки викориÑтовують файли, що підлÑгають оновленню під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. Можна дозволити майÑтру інÑталÑції закрити та Ñпробувати перезапуÑтити Ñ—Ñ… або перезавантажити комп’ютер пізніше." /> |
| 155 | <String Id="MsiRMFilesInUseDescription" Overridable="yes" Value="ДеÑкі файли, що підлÑгають оновленню, зараз викориÑтовуютьÑÑ." /> | 155 | <String Id="MsiRMFilesInUseDescription" Overridable="yes" Value="ДеÑкі файли, що підлÑгають оновленню, зараз викориÑтовуютьÑÑ." /> |
| 156 | <String Id="MsiRMFilesInUseTitle" Overridable="yes" Value="{\WixUI_Font_Title}Файли, Ñкі викориÑтовуютьÑÑ" /> | 156 | <String Id="MsiRMFilesInUseTitle" Overridable="yes" Value="{\WixUI_Font_Title}Файли, Ñкі викориÑтовуютьÑÑ" /> |
| 157 | <String Id="MsiRMFilesInUseUseRM" Overridable="yes" Value="&Закрийте ці заÑтоÑунки та Ñпробуйте Ñ—Ñ… перезапуÑтити." /> | 157 | <String Id="MsiRMFilesInUseUseRM" Overridable="yes" Value="&Закрийте ці додатки та Ñпробуйте Ñ—Ñ… перезапуÑтити." /> |
| 158 | <String Id="MsiRMFilesInUseDontUseRM" Overridable="yes" Value="&Ðе закривати заÑтоÑунки. Потрібно буде перезавантажити комп’ютер." /> | 158 | <String Id="MsiRMFilesInUseDontUseRM" Overridable="yes" Value="&Ðе закривати додатки. Потрібно буде перезавантажити комп’ютер." /> |
| 159 | 159 | ||
| 160 | <String Id="OutOfDiskDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 160 | <String Id="OutOfDiskDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 161 | <String Id="OutOfDiskDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 161 | <String Id="OutOfDiskDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 162 | <String Id="OutOfDiskDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції вибраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або вибрати інший диÑк призначеннÑ." /> | 162 | <String Id="OutOfDiskDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції обраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або обрати інший диÑк призначеннÑ." /> |
| 163 | <String Id="OutOfDiskDlgDescription" Overridable="yes" Value="ОбÑÑг, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції, перевищує обÑÑг вільного диÑкового проÑтору." /> | 163 | <String Id="OutOfDiskDlgDescription" Overridable="yes" Value="ОбÑÑг, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції, перевищує обÑÑг вільного диÑкового проÑтору." /> |
| 164 | <String Id="OutOfDiskDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Бракує диÑкового проÑтору" /> | 164 | <String Id="OutOfDiskDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Бракує диÑкового проÑтору" /> |
| 165 | <String Id="OutOfDiskDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> | 165 | <String Id="OutOfDiskDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> |
| 166 | 166 | ||
| 167 | <String Id="OutOfRbDiskDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 167 | <String Id="OutOfRbDiskDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 168 | <String Id="OutOfRbDiskDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 168 | <String Id="OutOfRbDiskDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 169 | <String Id="OutOfRbDiskDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції вибраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або вибрати інший диÑк призначеннÑ." /> | 169 | <String Id="OutOfRbDiskDlgText" Overridable="yes" Value="У виділених томах бракує диÑкового проÑтору Ð´Ð»Ñ Ñ–Ð½ÑталÑції обраних компонентів. Можна видалити з виділених томів кілька файлів, інÑталювати менше компонентів або обрати інший диÑк призначеннÑ." /> |
| 170 | <String Id="OutOfRbDiskDlgDescription" Overridable="yes" Value="ОбÑÑг, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції, перевищує обÑÑг вільного диÑкового проÑтору." /> | 170 | <String Id="OutOfRbDiskDlgDescription" Overridable="yes" Value="ОбÑÑг, необхідний Ð´Ð»Ñ Ñ–Ð½ÑталÑції, перевищує обÑÑг вільного диÑкового проÑтору." /> |
| 171 | <String Id="OutOfRbDiskDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Бракує диÑкового проÑтору" /> | 171 | <String Id="OutOfRbDiskDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Бракує диÑкового проÑтору" /> |
| 172 | <String Id="OutOfRbDiskDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> | 172 | <String Id="OutOfRbDiskDlgVolumeList" Overridable="yes" Value="{120}{70}{70}{70}{70}" /> |
| 173 | <String Id="OutOfRbDiskDlgText2" Overridable="yes" Value="Інший варіант – вимкнути в інÑталÑторі функцію відкочуваннÑ. У такому разі інÑталÑтор не зможе відновити вихідний Ñтан комп’ютера піÑÐ»Ñ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу інÑталÑції. Щоб погодитиÑÑ Ð½Ð° цей ризик Ñ– вимкнути функцію відкочуваннÑ, натиÑніть кнопку "Так"." /> | 173 | <String Id="OutOfRbDiskDlgText2" Overridable="yes" Value="Інший варіант – вимкнути в інÑталÑторі функцію відкочуваннÑ. У такому разі інÑталÑтор не зможе відновити вихідний Ñтан комп’ютеру піÑÐ»Ñ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу інÑталÑції. Щоб погодитиÑÑ Ð½Ð° цей ризик Ñ– вимкнути функцію відкочуваннÑ, натиÑніть кнопку "Так"." /> |
| 174 | 174 | ||
| 175 | <String Id="PrepareDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 175 | <String Id="PrepareDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 176 | <String Id="PrepareDlgBitmap" Overridable="yes" Value="WixUI_Bmp_Dialog" /> | 176 | <String Id="PrepareDlgBitmap" Overridable="yes" Value="WixUI_Bmp_Dialog" /> |
| @@ -189,7 +189,7 @@ | |||
| 189 | <String Id="ProgressDlgTitleRemoving" Overridable="yes" Value="{\WixUI_Font_Title}Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 189 | <String Id="ProgressDlgTitleRemoving" Overridable="yes" Value="{\WixUI_Font_Title}Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 190 | <String Id="ProgressDlgTextUpdating" Overridable="yes" Value="Зачекайте, доки майÑтер інÑталÑції оновить програму [ProductName]." /> | 190 | <String Id="ProgressDlgTextUpdating" Overridable="yes" Value="Зачекайте, доки майÑтер інÑталÑції оновить програму [ProductName]." /> |
| 191 | <String Id="ProgressDlgTitleUpdating" Overridable="yes" Value="{\WixUI_Font_Title}ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 191 | <String Id="ProgressDlgTitleUpdating" Overridable="yes" Value="{\WixUI_Font_Title}ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 192 | <String Id="ProgressDlgProgressBar" Overridable="yes" Value="Перебіг виконаннÑ" /> | 192 | <String Id="ProgressDlgProgressBar" Overridable="yes" Value="Виконано" /> |
| 193 | <String Id="ProgressDlgStatusLabel" Overridable="yes" Value="Стан:" /> | 193 | <String Id="ProgressDlgStatusLabel" Overridable="yes" Value="Стан:" /> |
| 194 | 194 | ||
| 195 | <String Id="ResumeDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 195 | <String Id="ResumeDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| @@ -207,9 +207,9 @@ | |||
| 207 | <String Id="SetupTypeDlgCompleteButtonTooltip" Overridable="yes" Value="Повна інÑталÑціÑ" /> | 207 | <String Id="SetupTypeDlgCompleteButtonTooltip" Overridable="yes" Value="Повна інÑталÑціÑ" /> |
| 208 | <String Id="SetupTypeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 208 | <String Id="SetupTypeDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 209 | <String Id="SetupTypeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вибір типу інÑталÑції" /> | 209 | <String Id="SetupTypeDlgTitle" Overridable="yes" Value="{\WixUI_Font_Title}Вибір типу інÑталÑції" /> |
| 210 | <String Id="SetupTypeDlgDescription" Overridable="yes" Value="Виберіть потрібний тип інÑталÑції" /> | 210 | <String Id="SetupTypeDlgDescription" Overridable="yes" Value="Оберіть потрібний тип інÑталÑції" /> |
| 211 | <String Id="SetupTypeDlgTypicalText" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð½Ð°Ð¹Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ñ–ÑˆÐ¸Ñ… компонентів програми (рекомендовано Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾Ñті кориÑтувачів)." /> | 211 | <String Id="SetupTypeDlgTypicalText" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð½Ð°Ð¹Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ñ–ÑˆÐ¸Ñ… компонентів програми (рекомендовано Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾Ñті кориÑтувачів)." /> |
| 212 | <String Id="SetupTypeDlgCustomText" Overridable="yes" Value="МожливіÑть вибрати компоненти програми та міÑце Ñ—Ñ… інÑталÑції (рекомендовано Ð´Ð»Ñ Ð´Ð¾Ñвідчених кориÑтувачів)." /> | 212 | <String Id="SetupTypeDlgCustomText" Overridable="yes" Value="МожливіÑть обрати компоненти програми та міÑце Ñ—Ñ… інÑталÑції (рекомендовано Ð´Ð»Ñ Ð´Ð¾Ñвідчених кориÑтувачів)." /> |
| 213 | <String Id="SetupTypeDlgCompleteText" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÑƒÑÑ–Ñ… програмних компонентів (найбільші вимоги до диÑкового проÑтору)." /> | 213 | <String Id="SetupTypeDlgCompleteText" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÑƒÑÑ–Ñ… програмних компонентів (найбільші вимоги до диÑкового проÑтору)." /> |
| 214 | 214 | ||
| 215 | <String Id="UserExit_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 215 | <String Id="UserExit_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| @@ -221,19 +221,19 @@ | |||
| 221 | <String Id="VerifyReadyDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 221 | <String Id="VerifyReadyDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 222 | <String Id="VerifyReadyDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> | 222 | <String Id="VerifyReadyDlgBannerBitmap" Overridable="yes" Value="WixUI_Bmp_Banner" /> |
| 223 | <String Id="VerifyReadyDlgInstall" Overridable="yes" Value="&ІнÑталювати" /> | 223 | <String Id="VerifyReadyDlgInstall" Overridable="yes" Value="&ІнÑталювати" /> |
| 224 | <String Id="VerifyReadyDlgInstallText" Overridable="yes" Value="Щоб розпочати інÑталÑцію, натиÑніть кнопку "ІнÑталювати". Щоб перевірити або змінити будь-Ñкі наÑтройки інÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> | 224 | <String Id="VerifyReadyDlgInstallText" Overridable="yes" Value="Щоб розпочати інÑталÑцію, натиÑніть кнопку "ІнÑталювати". Щоб перевірити або змінити будь-Ñкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½ÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> |
| 225 | <String Id="VerifyReadyDlgInstallTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до інÑталÑції програми [ProductName]" /> | 225 | <String Id="VerifyReadyDlgInstallTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до інÑталÑції програми [ProductName]" /> |
| 226 | <String Id="VerifyReadyDlgChange" Overridable="yes" Value="&Змінити" /> | 226 | <String Id="VerifyReadyDlgChange" Overridable="yes" Value="&Змінити" /> |
| 227 | <String Id="VerifyReadyDlgChangeText" Overridable="yes" Value="Щоб розпочати інÑталÑцію, натиÑніть кнопку "Змінити". Щоб перевірити або змінити будь-Ñкі наÑтройки інÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> | 227 | <String Id="VerifyReadyDlgChangeText" Overridable="yes" Value="Щоб розпочати інÑталÑцію, натиÑніть кнопку "Змінити". Щоб перевірити або змінити будь-Ñкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½ÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> |
| 228 | <String Id="VerifyReadyDlgChangeTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 228 | <String Id="VerifyReadyDlgChangeTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 229 | <String Id="VerifyReadyDlgRepair" Overridable="yes" Value="Відно&вити" /> | 229 | <String Id="VerifyReadyDlgRepair" Overridable="yes" Value="Відно&вити" /> |
| 230 | <String Id="VerifyReadyDlgRepairText" Overridable="yes" Value="Щоб відновити інÑталÑцію програми [ProductName], натиÑніть кнопку "Відновити". Щоб перевірити або змінити будь-Ñкі наÑтройки інÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> | 230 | <String Id="VerifyReadyDlgRepairText" Overridable="yes" Value="Щоб відновити інÑталÑцію програми [ProductName], натиÑніть кнопку "Відновити". Щоб перевірити або змінити будь-Ñкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½ÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> |
| 231 | <String Id="VerifyReadyDlgRepairTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 231 | <String Id="VerifyReadyDlgRepairTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 232 | <String Id="VerifyReadyDlgRemove" Overridable="yes" Value="&Видалити" /> | 232 | <String Id="VerifyReadyDlgRemove" Overridable="yes" Value="&Видалити" /> |
| 233 | <String Id="VerifyReadyDlgRemoveText" Overridable="yes" Value="Щоб видалити програму [ProductName] з цього комп’ютера, натиÑніть кнопку "Видалити". Щоб перевірити або змінити будь-Ñкі наÑтройки інÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> | 233 | <String Id="VerifyReadyDlgRemoveText" Overridable="yes" Value="Щоб видалити програму [ProductName] з цього комп’ютера, натиÑніть кнопку "Видалити". Щоб перевірити або змінити будь-Ñкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½ÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> |
| 234 | <String Id="VerifyReadyDlgRemoveTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 234 | <String Id="VerifyReadyDlgRemoveTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 235 | <String Id="VerifyReadyDlgUpdate" Overridable="yes" Value="&Оновити" /> | 235 | <String Id="VerifyReadyDlgUpdate" Overridable="yes" Value="&Оновити" /> |
| 236 | <String Id="VerifyReadyDlgUpdateText" Overridable="yes" Value="Щоб оновити програму [ProductName] зі Ñвого комп’ютера, натиÑніть кнопку "Оновити". Щоб перевірити або змінити будь-Ñкі наÑтройки інÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> | 236 | <String Id="VerifyReadyDlgUpdateText" Overridable="yes" Value="Щоб оновити програму [ProductName] зі Ñвого комп’ютера, натиÑніть кнопку "Оновити". Щоб перевірити або змінити будь-Ñкі Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½ÑталÑції, натиÑніть кнопку "Ðазад". Щоб закрити майÑтер, натиÑніть кнопку "СкаÑувати"." /> |
| 237 | <String Id="VerifyReadyDlgUpdateTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 237 | <String Id="VerifyReadyDlgUpdateTitle" Overridable="yes" Value="{\WixUI_Font_Title}УÑе готово до Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| 238 | 238 | ||
| 239 | <String Id="WaitForCostingDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> | 239 | <String Id="WaitForCostingDlg_Title" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ [ProductName]" /> |
| @@ -258,7 +258,7 @@ | |||
| 258 | <String Id="ProgressTextInstallValidate" Overridable="yes" Value="Перевірка інÑталÑції" /> | 258 | <String Id="ProgressTextInstallValidate" Overridable="yes" Value="Перевірка інÑталÑції" /> |
| 259 | <String Id="ProgressTextInstallFiles" Overridable="yes" Value="ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… файлів" /> | 259 | <String Id="ProgressTextInstallFiles" Overridable="yes" Value="ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… файлів" /> |
| 260 | <String Id="ProgressTextInstallFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> | 260 | <String Id="ProgressTextInstallFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> |
| 261 | <String Id="ProgressTextInstallAdminPackage" Overridable="yes" Value="ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² мережної інÑталÑції" /> | 261 | <String Id="ProgressTextInstallAdminPackage" Overridable="yes" Value="ÐšÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² мережевої інÑталÑції" /> |
| 262 | <String Id="ProgressTextInstallAdminPackageTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> | 262 | <String Id="ProgressTextInstallAdminPackageTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> |
| 263 | <String Id="ProgressTextFileCost" Overridable="yes" Value="ОбчиÑÐ»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ диÑкового проÑтору" /> | 263 | <String Id="ProgressTextFileCost" Overridable="yes" Value="ОбчиÑÐ»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ диÑкового проÑтору" /> |
| 264 | <String Id="ProgressTextCostInitialize" Overridable="yes" Value="ОбчиÑÐ»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ диÑкового проÑтору" /> | 264 | <String Id="ProgressTextCostInitialize" Overridable="yes" Value="ОбчиÑÐ»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ð³Ð¾ диÑкового проÑтору" /> |
| @@ -266,7 +266,7 @@ | |||
| 266 | <String Id="ProgressTextCreateShortcuts" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñрликів" /> | 266 | <String Id="ProgressTextCreateShortcuts" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñрликів" /> |
| 267 | <String Id="ProgressTextCreateShortcutsTemplate" Overridable="yes" Value="Ярлик: [1]" /> | 267 | <String Id="ProgressTextCreateShortcutsTemplate" Overridable="yes" Value="Ярлик: [1]" /> |
| 268 | <String Id="ProgressTextPublishComponents" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… компонентів" /> | 268 | <String Id="ProgressTextPublishComponents" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ð´Ð°Ñ‚Ð½Ð¸Ñ… компонентів" /> |
| 269 | <String Id="ProgressTextPublishComponentsTemplate" Overridable="yes" Value="Ідентифікатор компонента: [1], кваліфікатор: [2]" /> | 269 | <String Id="ProgressTextPublishComponentsTemplate" Overridable="yes" Value="Ідентифікатор компоненту: [1], кваліфікатор: [2]" /> |
| 270 | <String Id="ProgressTextPublishFeatures" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ продукту" /> | 270 | <String Id="ProgressTextPublishFeatures" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ продукту" /> |
| 271 | <String Id="ProgressTextPublishFeaturesTemplate" Overridable="yes" Value="ФункціÑ: [1]" /> | 271 | <String Id="ProgressTextPublishFeaturesTemplate" Overridable="yes" Value="ФункціÑ: [1]" /> |
| 272 | <String Id="ProgressTextPublishProduct" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про продукт" /> | 272 | <String Id="ProgressTextPublishProduct" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про продукт" /> |
| @@ -280,7 +280,7 @@ | |||
| 280 | <String Id="ProgressTextRegisterProgIdInfoTemplate" Overridable="yes" Value="Ідентифікатор програми: [1]" /> | 280 | <String Id="ProgressTextRegisterProgIdInfoTemplate" Overridable="yes" Value="Ідентифікатор програми: [1]" /> |
| 281 | <String Id="ProgressTextAllocateRegistrySpace" Overridable="yes" Value="Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð² реєÑтрі" /> | 281 | <String Id="ProgressTextAllocateRegistrySpace" Overridable="yes" Value="Ð’Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð² реєÑтрі" /> |
| 282 | <String Id="ProgressTextAllocateRegistrySpaceTemplate" Overridable="yes" Value="Вільне міÑце: [1]" /> | 282 | <String Id="ProgressTextAllocateRegistrySpaceTemplate" Overridable="yes" Value="Вільне міÑце: [1]" /> |
| 283 | <String Id="ProgressTextAppSearch" Overridable="yes" Value="Пошук інÑтальованих заÑтоÑунків" /> | 283 | <String Id="ProgressTextAppSearch" Overridable="yes" Value="Пошук інÑтальованих додатків" /> |
| 284 | <String Id="ProgressTextAppSearchTemplate" Overridable="yes" Value="ВлаÑтивіÑть: [1]. ПідпиÑ: [2]" /> | 284 | <String Id="ProgressTextAppSearchTemplate" Overridable="yes" Value="ВлаÑтивіÑть: [1]. ПідпиÑ: [2]" /> |
| 285 | <String Id="ProgressTextBindImage" Overridable="yes" Value="Зв’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів" /> | 285 | <String Id="ProgressTextBindImage" Overridable="yes" Value="Зв’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів" /> |
| 286 | <String Id="ProgressTextBindImageTemplate" Overridable="yes" Value="Файл: [1]" /> | 286 | <String Id="ProgressTextBindImageTemplate" Overridable="yes" Value="Файл: [1]" /> |
| @@ -291,21 +291,21 @@ | |||
| 291 | <String Id="ProgressTextDeleteServicesTemplate" Overridable="yes" Value="Служба: [1]" /> | 291 | <String Id="ProgressTextDeleteServicesTemplate" Overridable="yes" Value="Служба: [1]" /> |
| 292 | <String Id="ProgressTextDuplicateFiles" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¿Ñ–Ð¹ файлів" /> | 292 | <String Id="ProgressTextDuplicateFiles" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¿Ñ–Ð¹ файлів" /> |
| 293 | <String Id="ProgressTextDuplicateFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> | 293 | <String Id="ProgressTextDuplicateFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> |
| 294 | <String Id="ProgressTextFindRelatedProducts" Overridable="yes" Value="Пошук пов’Ñзаних заÑтоÑунків" /> | 294 | <String Id="ProgressTextFindRelatedProducts" Overridable="yes" Value="Пошук пов’Ñзаних додатків" /> |
| 295 | <String Id="ProgressTextFindRelatedProductsTemplate" Overridable="yes" Value="Знайдено заÑтоÑунок: [1]" /> | 295 | <String Id="ProgressTextFindRelatedProductsTemplate" Overridable="yes" Value="Знайдено додаток: [1]" /> |
| 296 | <String Id="ProgressTextInstallODBC" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ–Ð² ODBC" /> | 296 | <String Id="ProgressTextInstallODBC" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ–Ð² ODBC" /> |
| 297 | <String Id="ProgressTextInstallServices" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð½Ð¾Ð²Ð¸Ñ… Ñлужб" /> | 297 | <String Id="ProgressTextInstallServices" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ Ð½Ð¾Ð²Ð¸Ñ… Ñлужб" /> |
| 298 | <String Id="ProgressTextInstallServicesTemplate" Overridable="yes" Value="Служба: [2]" /> | 298 | <String Id="ProgressTextInstallServicesTemplate" Overridable="yes" Value="Служба: [2]" /> |
| 299 | <String Id="ProgressTextLaunchConditions" Overridable="yes" Value="Перевірка умов запуÑку" /> | 299 | <String Id="ProgressTextLaunchConditions" Overridable="yes" Value="Перевірка умов запуÑку" /> |
| 300 | <String Id="ProgressTextMigrateFeatureStates" Overridable="yes" Value="ÐœÑ–Ð³Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² компонентів із пов’Ñзаних заÑтоÑунків" /> | 300 | <String Id="ProgressTextMigrateFeatureStates" Overridable="yes" Value="ÐœÑ–Ð³Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² компонентів із пов’Ñзаних додатків" /> |
| 301 | <String Id="ProgressTextMigrateFeatureStatesTemplate" Overridable="yes" Value="ЗаÑтоÑунок: [1]" /> | 301 | <String Id="ProgressTextMigrateFeatureStatesTemplate" Overridable="yes" Value="ЗаÑтоÑунок: [1]" /> |
| 302 | <String Id="ProgressTextMoveFiles" Overridable="yes" Value="ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> | 302 | <String Id="ProgressTextMoveFiles" Overridable="yes" Value="ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> |
| 303 | <String Id="ProgressTextMoveFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> | 303 | <String Id="ProgressTextMoveFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9], розмір: [6]" /> |
| 304 | <String Id="ProgressTextPatchFiles" Overridable="yes" Value="Ð’Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> | 304 | <String Id="ProgressTextPatchFiles" Overridable="yes" Value="Ð’Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> |
| 305 | <String Id="ProgressTextPatchFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [2], розмір: [3]" /> | 305 | <String Id="ProgressTextPatchFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [2], розмір: [3]" /> |
| 306 | <String Id="ProgressTextProcessComponents" Overridable="yes" Value="ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтрації компонентів" /> | 306 | <String Id="ProgressTextProcessComponents" Overridable="yes" Value="ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтрації компонентів" /> |
| 307 | <String Id="ProgressTextRegisterComPlus" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð·Ð°ÑтоÑунків Ñ– компонентів COM+" /> | 307 | <String Id="ProgressTextRegisterComPlus" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð² Ñ– компонентів COM+" /> |
| 308 | <String Id="ProgressTextRegisterComPlusTemplate" Overridable="yes" Value="Ідентифікатор заÑтоÑунку: [1]{{, тип заÑтоÑунку: [2], кориÑтувачі: [3], RSN: [4]}}" /> | 308 | <String Id="ProgressTextRegisterComPlusTemplate" Overridable="yes" Value="Ідентифікатор додатку: [1]{{, тип заÑтоÑунку: [2], кориÑтувачі: [3], RSN: [4]}}" /> |
| 309 | <String Id="ProgressTextRegisterFonts" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ–Ð²" /> | 309 | <String Id="ProgressTextRegisterFonts" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ–Ð²" /> |
| 310 | <String Id="ProgressTextRegisterFontsTemplate" Overridable="yes" Value="Шрифт: [1]" /> | 310 | <String Id="ProgressTextRegisterFontsTemplate" Overridable="yes" Value="Шрифт: [1]" /> |
| 311 | <String Id="ProgressTextRegisterProduct" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ" /> | 311 | <String Id="ProgressTextRegisterProduct" Overridable="yes" Value="РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ" /> |
| @@ -318,8 +318,8 @@ | |||
| 318 | <String Id="ProgressTextRemoveDuplicateFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9]" /> | 318 | <String Id="ProgressTextRemoveDuplicateFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9]" /> |
| 319 | <String Id="ProgressTextRemoveEnvironmentStrings" Overridable="yes" Value="ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€Ñдків оточеннÑ" /> | 319 | <String Id="ProgressTextRemoveEnvironmentStrings" Overridable="yes" Value="ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€Ñдків оточеннÑ" /> |
| 320 | <String Id="ProgressTextRemoveEnvironmentStringsTemplate" Overridable="yes" Value="Ім’Ñ: [1], значеннÑ: [2], Ð´Ñ–Ñ [3]" /> | 320 | <String Id="ProgressTextRemoveEnvironmentStringsTemplate" Overridable="yes" Value="Ім’Ñ: [1], значеннÑ: [2], Ð´Ñ–Ñ [3]" /> |
| 321 | <String Id="ProgressTextRemoveExistingProducts" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑунків" /> | 321 | <String Id="ProgressTextRemoveExistingProducts" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð²" /> |
| 322 | <String Id="ProgressTextRemoveExistingProductsTemplate" Overridable="yes" Value="ЗаÑтоÑунок: [1], командний Ñ€Ñдок: [2]" /> | 322 | <String Id="ProgressTextRemoveExistingProductsTemplate" Overridable="yes" Value="Додаток: [1], командний Ñ€Ñдок: [2]" /> |
| 323 | <String Id="ProgressTextRemoveFiles" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> | 323 | <String Id="ProgressTextRemoveFiles" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²" /> |
| 324 | <String Id="ProgressTextRemoveFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9]" /> | 324 | <String Id="ProgressTextRemoveFilesTemplate" Overridable="yes" Value="Файл: [1], каталог: [9]" /> |
| 325 | <String Id="ProgressTextRemoveFolders" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿Ð¾Ðº" /> | 325 | <String Id="ProgressTextRemoveFolders" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿Ð¾Ðº" /> |
| @@ -339,16 +339,16 @@ | |||
| 339 | <String Id="ProgressTextSetODBCFolders" Overridable="yes" Value="Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð² ODBC" /> | 339 | <String Id="ProgressTextSetODBCFolders" Overridable="yes" Value="Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–Ð² ODBC" /> |
| 340 | <String Id="ProgressTextStartServices" Overridable="yes" Value="ЗапуÑк Ñлужб" /> | 340 | <String Id="ProgressTextStartServices" Overridable="yes" Value="ЗапуÑк Ñлужб" /> |
| 341 | <String Id="ProgressTextStartServicesTemplate" Overridable="yes" Value="Служба: [1]" /> | 341 | <String Id="ProgressTextStartServicesTemplate" Overridable="yes" Value="Служба: [1]" /> |
| 342 | <String Id="ProgressTextStopServices" Overridable="yes" Value="Ð—ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñлужб" /> | 342 | <String Id="ProgressTextStopServices" Overridable="yes" Value="Зупинка Ñлужб" /> |
| 343 | <String Id="ProgressTextStopServicesTemplate" Overridable="yes" Value="Служба: [1]" /> | 343 | <String Id="ProgressTextStopServicesTemplate" Overridable="yes" Value="Служба: [1]" /> |
| 344 | <String Id="ProgressTextUnpublishComponents" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— придатних компонентів" /> | 344 | <String Id="ProgressTextUnpublishComponents" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— придатних компонентів" /> |
| 345 | <String Id="ProgressTextUnpublishComponentsTemplate" Overridable="yes" Value="Ідентифікатор компонента: [1], кваліфікатор: [2]" /> | 345 | <String Id="ProgressTextUnpublishComponentsTemplate" Overridable="yes" Value="Ідентифікатор компоненту: [1], кваліфікатор: [2]" /> |
| 346 | <String Id="ProgressTextUnpublishFeatures" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— функцій продукту" /> | 346 | <String Id="ProgressTextUnpublishFeatures" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— функцій продукту" /> |
| 347 | <String Id="ProgressTextUnpublishFeaturesTemplate" Overridable="yes" Value="ФункціÑ: [1]" /> | 347 | <String Id="ProgressTextUnpublishFeaturesTemplate" Overridable="yes" Value="ФункціÑ: [1]" /> |
| 348 | <String Id="ProgressTextUnregisterClassInfo" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації Ñерверів клаÑів" /> | 348 | <String Id="ProgressTextUnregisterClassInfo" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації Ñерверів клаÑів" /> |
| 349 | <String Id="ProgressTextUnregisterClassInfoTemplate" Overridable="yes" Value="Ідентифікатор клаÑу: [1]" /> | 349 | <String Id="ProgressTextUnregisterClassInfoTemplate" Overridable="yes" Value="Ідентифікатор клаÑу: [1]" /> |
| 350 | <String Id="ProgressTextUnregisterComPlus" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації заÑтоÑунків Ñ– компонентів COM+" /> | 350 | <String Id="ProgressTextUnregisterComPlus" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації додаткыв Ñ– компонентів COM+" /> |
| 351 | <String Id="ProgressTextUnregisterComPlusTemplate" Overridable="yes" Value="Ідентифікатор заÑтоÑунку: [1]{{, тип заÑтоÑунку: [2]}}" /> | 351 | <String Id="ProgressTextUnregisterComPlusTemplate" Overridable="yes" Value="Ідентифікатор додатку: [1]{{, тип додатку: [2]}}" /> |
| 352 | <String Id="ProgressTextUnregisterExtensionInfo" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації Ñерверів розширень" /> | 352 | <String Id="ProgressTextUnregisterExtensionInfo" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації Ñерверів розширень" /> |
| 353 | <String Id="ProgressTextUnregisterExtensionInfoTemplate" Overridable="yes" Value="РозширеннÑ: [1]" /> | 353 | <String Id="ProgressTextUnregisterExtensionInfoTemplate" Overridable="yes" Value="РозширеннÑ: [1]" /> |
| 354 | <String Id="ProgressTextUnregisterFonts" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації шрифтів" /> | 354 | <String Id="ProgressTextUnregisterFonts" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації шрифтів" /> |
| @@ -365,15 +365,15 @@ | |||
| 365 | <String Id="ProgressTextWriteIniValuesTemplate" Overridable="yes" Value="Файл: [1], розділ: [2], ключ: [3], значеннÑ: [4]" /> | 365 | <String Id="ProgressTextWriteIniValuesTemplate" Overridable="yes" Value="Файл: [1], розділ: [2], ключ: [3], значеннÑ: [4]" /> |
| 366 | <String Id="ProgressTextWriteRegistryValues" Overridable="yes" Value="Ð—Ð°Ð¿Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ до ÑиÑтемного реєÑтру" /> | 366 | <String Id="ProgressTextWriteRegistryValues" Overridable="yes" Value="Ð—Ð°Ð¿Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ до ÑиÑтемного реєÑтру" /> |
| 367 | <String Id="ProgressTextWriteRegistryValuesTemplate" Overridable="yes" Value="Розділ: [1], ім’Ñ: [2], значеннÑ: [3]" /> | 367 | <String Id="ProgressTextWriteRegistryValuesTemplate" Overridable="yes" Value="Розділ: [1], ім’Ñ: [2], значеннÑ: [3]" /> |
| 368 | <String Id="ProgressTextAdvertise" Overridable="yes" Value="ÐŸÐ¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про заÑтоÑунок" /> | 368 | <String Id="ProgressTextAdvertise" Overridable="yes" Value="ÐŸÐ¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про додаток" /> |
| 369 | <String Id="ProgressTextGenerateScript" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ Ñценарію Ð´Ð»Ñ Ð´Ñ–Ñ—:" /> | 369 | <String Id="ProgressTextGenerateScript" Overridable="yes" Value="Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ Ñценарію Ð´Ð»Ñ Ð´Ñ–Ñ—:" /> |
| 370 | <String Id="ProgressTextGenerateScriptTemplate" Overridable="yes" Value="[1]" /> | 370 | <String Id="ProgressTextGenerateScriptTemplate" Overridable="yes" Value="[1]" /> |
| 371 | <String Id="ProgressTextInstallSFPCatalogFile" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÑиÑтемного каталогу" /> | 371 | <String Id="ProgressTextInstallSFPCatalogFile" Overridable="yes" Value="ІнÑталÑÑ†Ñ–Ñ ÑиÑтемного каталогу" /> |
| 372 | <String Id="ProgressTextInstallSFPCatalogFileTemplate" Overridable="yes" Value="Файл: [1], залежноÑті: [2]" /> | 372 | <String Id="ProgressTextInstallSFPCatalogFileTemplate" Overridable="yes" Value="Файл: [1], залежноÑті: [2]" /> |
| 373 | <String Id="ProgressTextMsiPublishAssemblies" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про ÑкладаннÑ" /> | 373 | <String Id="ProgressTextMsiPublishAssemblies" Overridable="yes" Value="ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про ÑкладаннÑ" /> |
| 374 | <String Id="ProgressTextMsiPublishAssembliesTemplate" Overridable="yes" Value="КонтекÑÑ‚ заÑтоÑунку:[1], Ñ–Ð¼â€™Ñ ÑкладаннÑ:[2]" /> | 374 | <String Id="ProgressTextMsiPublishAssembliesTemplate" Overridable="yes" Value="КонтекÑÑ‚ додатку:[1], Ñ–Ð¼â€™Ñ ÑкладаннÑ:[2]" /> |
| 375 | <String Id="ProgressTextMsiUnpublishAssemblies" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— відомоÑтей про ÑкладаннÑ" /> | 375 | <String Id="ProgressTextMsiUnpublishAssemblies" Overridable="yes" Value="СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— відомоÑтей про ÑкладаннÑ" /> |
| 376 | <String Id="ProgressTextMsiUnpublishAssembliesTemplate" Overridable="yes" Value="КонтекÑÑ‚ заÑтоÑунку:[1], Ñ–Ð¼â€™Ñ ÑкладаннÑ:[2]" /> | 376 | <String Id="ProgressTextMsiUnpublishAssembliesTemplate" Overridable="yes" Value="КонтекÑÑ‚ додатку:[1], Ñ–Ð¼â€™Ñ ÑкладаннÑ:[2]" /> |
| 377 | <String Id="ProgressTextRollback" Overridable="yes" Value="Ð’Ñ–Ð´ÐºÐ¾Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ–Ñ—:" /> | 377 | <String Id="ProgressTextRollback" Overridable="yes" Value="Ð’Ñ–Ð´ÐºÐ¾Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ–Ñ—:" /> |
| 378 | <String Id="ProgressTextRollbackTemplate" Overridable="yes" Value="[1]" /> | 378 | <String Id="ProgressTextRollbackTemplate" Overridable="yes" Value="[1]" /> |
| 379 | <String Id="ProgressTextRollbackCleanup" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ñ… файлів" /> | 379 | <String Id="ProgressTextRollbackCleanup" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ñ… файлів" /> |
| @@ -386,7 +386,7 @@ | |||
| 386 | <String Id="Error1" Overridable="yes" Value="{{Помилка [1]. }}" /> | 386 | <String Id="Error1" Overridable="yes" Value="{{Помилка [1]. }}" /> |
| 387 | <String Id="Error2" Overridable="yes" Value="ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ [1]." /> | 387 | <String Id="Error2" Overridable="yes" Value="ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ [1]." /> |
| 388 | <String Id="Error4" Overridable="yes" Value="ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ [1]." /> | 388 | <String Id="Error4" Overridable="yes" Value="ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ [1]." /> |
| 389 | <String Id="Error5" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції цього пакета ÑталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° помилка інÑталÑтора. Можливо, це вказує на проблему з пакетом. Код помилки – [1]. {{Ðргументи: [2], [3], [4]}}" /> | 389 | <String Id="Error5" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції цього пакета ÑталаÑÑŒ неочікувана помилка інÑталÑтора. Можливо, це вказує на проблему з пакетом. Код помилки – [1]. {{Ðргументи: [2], [3], [4]}}" /> |
| 390 | <String Id="Error7" Overridable="yes" Value="{{Ðемає міÑÑ†Ñ Ð½Ð° диÑку: }}" /> | 390 | <String Id="Error7" Overridable="yes" Value="{{Ðемає міÑÑ†Ñ Ð½Ð° диÑку: }}" /> |
| 391 | <String Id="Error8" Overridable="yes" Value="Ð”Ñ–Ñ [Time]: [1]. [2]" /> | 391 | <String Id="Error8" Overridable="yes" Value="Ð”Ñ–Ñ [Time]: [1]. [2]" /> |
| 392 | <String Id="Error9" Overridable="yes" Value="[ProductName]" /> | 392 | <String Id="Error9" Overridable="yes" Value="[ProductName]" /> |
| @@ -397,152 +397,152 @@ | |||
| 397 | <String Id="Error14" Overridable="yes" Value="Дію почато [Time]: [1]." /> | 397 | <String Id="Error14" Overridable="yes" Value="Дію почато [Time]: [1]." /> |
| 398 | <String Id="Error15" Overridable="yes" Value="Дію завершено [Time]: [1]. Повернено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2]." /> | 398 | <String Id="Error15" Overridable="yes" Value="Дію завершено [Time]: [1]. Повернено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2]." /> |
| 399 | <String Id="Error16" Overridable="yes" Value="ЗалишилоÑÑ Ñ‡Ð°Ñу: {[1] хв. }{[2] Ñек.}" /> | 399 | <String Id="Error16" Overridable="yes" Value="ЗалишилоÑÑ Ñ‡Ð°Ñу: {[1] хв. }{[2] Ñек.}" /> |
| 400 | <String Id="Error17" Overridable="yes" Value="Бракує пам’Ñті. Закрийте інші заÑтоÑунки та повторіть Ñпробу." /> | 400 | <String Id="Error17" Overridable="yes" Value="Бракує пам’Ñті. Закрийте інші додатки та повторіть Ñпробу." /> |
| 401 | <String Id="Error18" Overridable="yes" Value="ІнÑталÑтор не відповідає." /> | 401 | <String Id="Error18" Overridable="yes" Value="ІнÑталÑтор не відповідає." /> |
| 402 | <String Id="Error19" Overridable="yes" Value="ІнÑталÑтор передчаÑно припинив роботу." /> | 402 | <String Id="Error19" Overridable="yes" Value="ІнÑталÑтор передчаÑно припинив роботу." /> |
| 403 | <String Id="Error20" Overridable="yes" Value="Зачекайте: ÑиÑтема Windows наÑтроює програму [ProductName]" /> | 403 | <String Id="Error20" Overridable="yes" Value="Зачекайте: ÑиÑтема Windows налаштовує програму [ProductName]" /> |
| 404 | <String Id="Error21" Overridable="yes" Value="Триває Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¸Ñ… даних..." /> | 404 | <String Id="Error21" Overridable="yes" Value="Триває збір потрібних даних..." /> |
| 405 | <String Id="Error22" Overridable="yes" Value="Триває Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… верÑій цього заÑтоÑунку..." /> | 405 | <String Id="Error22" Overridable="yes" Value="Триває Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… верÑій цього додатку..." /> |
| 406 | <String Id="Error23" Overridable="yes" Value="Підготовка до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… верÑій цього заÑтоÑунку..." /> | 406 | <String Id="Error23" Overridable="yes" Value="Підготовка до Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ–Ñ… верÑій цього додатку..." /> |
| 407 | <String Id="Error32" Overridable="yes" Value="Роботу програми інÑталÑції {[ProductName]} уÑпішно завершено." /> | 407 | <String Id="Error32" Overridable="yes" Value="Роботу програми інÑталÑції {[ProductName]} уÑпішно завершено." /> |
| 408 | <String Id="Error33" Overridable="yes" Value="Помилка програми інÑталÑції {[ProductName]}." /> | 408 | <String Id="Error33" Overridable="yes" Value="Помилка програми інÑталÑції {[ProductName]}." /> |
| 409 | <String Id="Error1101" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 409 | <String Id="Error1101" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 410 | <String Id="Error1301" Overridable="yes" Value="Ðе вдалоÑÑ Ñтворити файл "[2]". Каталог із таким іменем уже Ñ–Ñнує. СкаÑуйте інÑталÑцію та виберіть інше розташуваннÑ." /> | 410 | <String Id="Error1301" Overridable="yes" Value="Ðе вдалоÑÑŒ Ñтворити файл "[2]". Каталог з таким іменем уже Ñ–Ñнує. СкаÑуйте інÑталÑцію та оберіть інше розташуваннÑ." /> |
| 411 | <String Id="Error1302" Overridable="yes" Value="Ð’Ñтавте диÑк: [2]" /> | 411 | <String Id="Error1302" Overridable="yes" Value="Ð’Ñтавте диÑк: [2]" /> |
| 412 | <String Id="Error1303" Overridable="yes" Value="ІнÑталÑтор не має належних прав доÑтупу до цього каталогу: [2]. ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції неможливе. Ввійдіть до ÑиÑтеми Ñк адмініÑтратор або звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора." /> | 412 | <String Id="Error1303" Overridable="yes" Value="ІнÑталÑтор не має належних прав доÑтупу до цього каталогу: [2]. ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції неможливе. Увійдіть до ÑиÑтеми Ñк адмініÑтратор або звернітьÑÑ Ð´Ð¾ ÑиÑтемного адмініÑтратора." /> |
| 413 | <String Id="Error1304" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу: [2]. ПереконайтеÑÑ, що маєте доÑтуп до цього каталогу." /> | 413 | <String Id="Error1304" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу: [2]. ПереконайтеÑÑŒ, що маєте доÑтуп до цього каталогу." /> |
| 414 | <String Id="Error1305" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 414 | <String Id="Error1305" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 415 | <String Id="Error1306" Overridable="yes" Value="Файл "[2]" відкрито в режимі монопольного доÑтупу в іншому заÑтоÑунку. Закрийте вÑÑ– інші заÑтоÑунки й натиÑніть кнопку "Повторити"." /> | 415 | <String Id="Error1306" Overridable="yes" Value="Файл "[2]" відкрито в режимі монопольного доÑтупу в іншому додатку. Закрийте вÑÑ– інші додатки й натиÑніть кнопку "Повторити"." /> |
| 416 | <String Id="Error1307" Overridable="yes" Value="ÐедоÑтатньо міÑÑ†Ñ Ð½Ð° диÑку Ð´Ð»Ñ Ñ–Ð½ÑталÑції файлу: [2]. Звільніть міÑце й натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб вийти." /> | 416 | <String Id="Error1307" Overridable="yes" Value="ÐедоÑтатньо міÑÑ†Ñ Ð½Ð° диÑку Ð´Ð»Ñ Ñ–Ð½ÑталÑції файлу: [2]. Звільніть міÑце й натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб вийти." /> |
| 417 | <String Id="Error1308" Overridable="yes" Value="Вихідний файл не знайдено: [2]. ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 417 | <String Id="Error1308" Overridable="yes" Value="Вихідний файл не знайдено: [2]. ПереконайтеÑÑŒ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 418 | <String Id="Error1309" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу: [3]. {{ СиÑтемна помилка [2].}} ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 418 | <String Id="Error1309" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файлу: [3]. {{ СиÑтемна помилка [2].}} ПереконайтеÑÑŒ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 419 | <String Id="Error1310" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу: [3]. {{ СиÑтемна помилка [2].}} ПереконайтеÑÑ, що маєте доÑтуп до цього каталогу." /> | 419 | <String Id="Error1310" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу: [3]. {{ СиÑтемна помилка [2].}} ПереконайтеÑÑŒ, що маєте доÑтуп до цього каталогу." /> |
| 420 | <String Id="Error1311" Overridable="yes" Value="Вихідний файл не знайдено{{(CAB-файл)}}: [2]. ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 420 | <String Id="Error1311" Overridable="yes" Value="Вихідний файл не знайдено{{(CAB-файл)}}: [2]. ПереконайтеÑÑŒ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 421 | <String Id="Error1312" Overridable="yes" Value="Ðе вдалоÑÑ Ñтворити каталог "[2]". Файл із таким іменем уже Ñ–Ñнує. Перейменуйте або видаліть цей файл Ñ– натиÑніть кнопку "Повторити". Щоб вийти, натиÑніть кнопку "СкаÑувати"." /> | 421 | <String Id="Error1312" Overridable="yes" Value="Ðе вдалоÑÑŒ Ñтворити каталог "[2]". Файл із таким іменем уже Ñ–Ñнує. Перейменуйте або видаліть цей файл Ñ– натиÑніть кнопку "Повторити". Щоб вийти, натиÑніть кнопку "СкаÑувати"." /> |
| 422 | <String Id="Error1313" Overridable="yes" Value="Том [2] зараз недоÑтупний. Виберіть інший." /> | 422 | <String Id="Error1313" Overridable="yes" Value="Том [2] зараз недоÑтупний. Оберіть інший." /> |
| 423 | <String Id="Error1314" Overridable="yes" Value="Указаний шлÑÑ… "[2]" недоÑтупний." /> | 423 | <String Id="Error1314" Overridable="yes" Value="Вказаний шлÑÑ… "[2]" недоÑтупний." /> |
| 424 | <String Id="Error1315" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати до вказаної папки: [2]." /> | 424 | <String Id="Error1315" Overridable="yes" Value="Ðе вдалоÑÑŒ запиÑати до вказаної папки: [2]." /> |
| 425 | <String Id="Error1316" Overridable="yes" Value="СталаÑÑ Ð¼ÐµÑ€ÐµÐ¶Ð½Ð° помилка під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ: [2]" /> | 425 | <String Id="Error1316" Overridable="yes" Value="СталаÑÑŒ мережева помилка під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ: [2]" /> |
| 426 | <String Id="Error1317" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: [2]" /> | 426 | <String Id="Error1317" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: [2]" /> |
| 427 | <String Id="Error1318" Overridable="yes" Value="СталаÑÑ Ð¼ÐµÑ€ÐµÐ¶Ð½Ð° помилка під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: [2]" /> | 427 | <String Id="Error1318" Overridable="yes" Value="СталаÑÑŒ мережева помилка під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ: [2]" /> |
| 428 | <String Id="Error1319" Overridable="yes" Value="СталаÑÑ Ð¼ÐµÑ€ÐµÐ¶Ð½Ð° помилка під Ñ‡Ð°Ñ Ñпроби відкрити CAB-файл із вихідними файлами: [2]" /> | 428 | <String Id="Error1319" Overridable="yes" Value="СталаÑÑŒ мережева помилка під Ñ‡Ð°Ñ Ñпроби відкрити CAB-файл із вихідними файлами: [2]" /> |
| 429 | <String Id="Error1320" Overridable="yes" Value="Указано задовгий шлÑÑ…: [2]" /> | 429 | <String Id="Error1320" Overridable="yes" Value="Вказано задовгий шлÑÑ…: [2]" /> |
| 430 | <String Id="Error1321" Overridable="yes" Value="ІнÑталÑтор не має належних прав Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу: [2]." /> | 430 | <String Id="Error1321" Overridable="yes" Value="ІнÑталÑтор не має належних прав Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу: [2]." /> |
| 431 | <String Id="Error1322" Overridable="yes" Value="ЧаÑтина шлÑху до папки "[2]" неприпуÑтима: пуÑта або перевищує дозволену в ÑиÑтемі довжину." /> | 431 | <String Id="Error1322" Overridable="yes" Value="ЧаÑтина шлÑху до папки "[2]" неприпуÑтима: пуÑта або перевищує дозволену в ÑиÑтемі довжину." /> |
| 432 | <String Id="Error1323" Overridable="yes" Value="ШлÑÑ… до папки "[2]" міÑтить неприпуÑтимі Ð´Ð»Ñ ÑˆÐ»Ñху Ñлова." /> | 432 | <String Id="Error1323" Overridable="yes" Value="ШлÑÑ… до папки "[2]" міÑтить неприпуÑтимі Ð´Ð»Ñ ÑˆÐ»Ñху Ñлова." /> |
| 433 | <String Id="Error1324" Overridable="yes" Value="ШлÑÑ… до папки "[2]" міÑтить неприпуÑтимий Ñимвол." /> | 433 | <String Id="Error1324" Overridable="yes" Value="ШлÑÑ… до папки "[2]" міÑтить неприпуÑтимий Ñимвол." /> |
| 434 | <String Id="Error1325" Overridable="yes" Value=""[2]" не Ñ” припуÑтимим коротким іменем файлу." /> | 434 | <String Id="Error1325" Overridable="yes" Value=""[2]" не Ñ” припуÑтимим коротким ім'Ñм файлу." /> |
| 435 | <String Id="Error1326" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² безпеки файлу: [3] GetLastError: [2]" /> | 435 | <String Id="Error1326" Overridable="yes" Value="Помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² безпеки файлу: [3] GetLastError: [2]" /> |
| 436 | <String Id="Error1327" Overridable="yes" Value="Ðеправильний приÑтрій: [2]" /> | 436 | <String Id="Error1327" Overridable="yes" Value="Ðеправильний приÑтрій: [2]" /> |
| 437 | <String Id="Error1328" Overridable="yes" Value="Помилка заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ файлу [2]. Можливо, файл було оновлено в інший ÑпоÑіб, Ñ– це Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¶Ðµ не може його змінити. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾ÐºÐ»Ð°Ð´Ð½Ñ–ÑˆÐ¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ поÑтачальника виправленнÑ. {{СиÑтемна помилка: [3]}}" /> | 437 | <String Id="Error1328" Overridable="yes" Value="Помилка заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ файлу [2]. Можливо, файл було оновлено в інший ÑпоÑіб, Ñ– це Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¶Ðµ не може його змінити. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾ÐºÐ»Ð°Ð´Ð½Ñ–ÑˆÐ¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ поÑтачальника виправленнÑ. {{СиÑтемна помилка: [3]}}" /> |
| 438 | <String Id="Error1329" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати потрібний файл, оÑкільки в CAB-файлі [2] немає цифрового підпиÑу. Це може Ñвідчити про Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ CAB-файлу." /> | 438 | <String Id="Error1329" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати потрібний файл, оÑкільки в CAB-файлі [2] немає цифрового підпиÑу. Це може Ñвідчити про Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ CAB-файлу." /> |
| 439 | <String Id="Error1330" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати потрібний файл, оÑкільки CAB-файл [2] міÑтить недійÑний цифровий підпиÑ. Це може Ñвідчити про Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ CAB-файлу.{{ Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ WinVerifyTrust повернула помилку [3].}}" /> | 439 | <String Id="Error1330" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати потрібний файл, оÑкільки CAB-файл [2] міÑтить недійÑний цифровий підпиÑ. Це може Ñвідчити про Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ CAB-файлу.{{ Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ WinVerifyTrust повернула помилку [3].}}" /> |
| 440 | <String Id="Error1331" Overridable="yes" Value="Ðе вдалоÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾ Ñкопіювати файл [2]: помилка CRC." /> | 440 | <String Id="Error1331" Overridable="yes" Value="Ðе вдалоÑÑŒ належно Ñкопіювати файл [2]: помилка CRC." /> |
| 441 | <String Id="Error1332" Overridable="yes" Value="Ðе вдалоÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾ переміÑтити файл [2]: помилка CRC." /> | 441 | <String Id="Error1332" Overridable="yes" Value="Ðе вдалоÑÑŒ належно переміÑтити файл [2]: помилка CRC." /> |
| 442 | <String Id="Error1333" Overridable="yes" Value="Ðе вдалоÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾ виправити файл [2]: помилка CRC." /> | 442 | <String Id="Error1333" Overridable="yes" Value="Ðе вдалоÑÑŒ належно виправити файл [2]: помилка CRC." /> |
| 443 | <String Id="Error1334" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати файл "[2]", оÑкільки його немає в CAB-файлі "[3]". Це може Ñвідчити про помилку мережі, помилку Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚-диÑка або проблему з пакетом." /> | 443 | <String Id="Error1334" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати файл "[2]", оÑкільки його немає в CAB-файлі "[3]". Це може Ñвідчити про помилку мережі, помилку Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚-диÑку або проблему з пакетом." /> |
| 444 | <String Id="Error1335" Overridable="yes" Value="Потрібний Ð´Ð»Ñ Ñ–Ð½ÑталÑції CAB-файл "[2]" пошкоджений Ñ– непридатний Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ. Це може Ñвідчити про помилку мережі, помилку Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚-диÑка або проблему з пакетом." /> | 444 | <String Id="Error1335" Overridable="yes" Value="Потрібний Ð´Ð»Ñ Ñ–Ð½ÑталÑції CAB-файл "[2]" пошкоджений Ñ– непридатний Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ. Це може Ñвідчити про помилку мережі, помилку Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚-диÑка або проблему з пакетом." /> |
| 445 | <String Id="Error1336" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового файлу, потрібного Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції.{{ Папка: [3]. Код ÑиÑтемної помилки: [2]}}" /> | 445 | <String Id="Error1336" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового файлу, потрібного Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції.{{ Папка: [3]. Код ÑиÑтемної помилки: [2]}}" /> |
| 446 | <String Id="Error1401" Overridable="yes" Value="Ðе вдалоÑÑ Ñтворити розділ: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 446 | <String Id="Error1401" Overridable="yes" Value="Ðе вдалоÑÑŒ Ñтворити розділ: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 447 | <String Id="Error1402" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ розділ: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 447 | <String Id="Error1402" Overridable="yes" Value="Ðе вдалоÑÑŒ відкрити розділ: [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 448 | <String Id="Error1403" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] з розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 448 | <String Id="Error1403" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] з розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 449 | <String Id="Error1404" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ розділ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 449 | <String Id="Error1404" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити розділ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 450 | <String Id="Error1405" Overridable="yes" Value="Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] з розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 450 | <String Id="Error1405" Overridable="yes" Value="Ðе вдалоÑÑŒ прочитати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] з розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 451 | <String Id="Error1406" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] до розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 451 | <String Id="Error1406" Overridable="yes" Value="Ðе вдалоÑÑŒ запиÑати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [2] до розділу [3]. {{ СиÑтемна помилка [4].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 452 | <String Id="Error1407" Overridable="yes" Value="Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ імена значень Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 452 | <String Id="Error1407" Overridable="yes" Value="Ðе вдалоÑÑŒ отримати імена значень Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 453 | <String Id="Error1408" Overridable="yes" Value="Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ імена підрозділів Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 453 | <String Id="Error1408" Overridable="yes" Value="Ðе вдалоÑÑŒ отримати імена підрозділів Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 454 | <String Id="Error1409" Overridable="yes" Value="Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ відомоÑті про безпеку Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 454 | <String Id="Error1409" Overridable="yes" Value="Ðе вдалоÑÑŒ прочитати відомоÑті про безпеку Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ [2]. {{ СиÑтемна помилка [3].}} ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð´Ð¾Ñтупу до цього розділу, або звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 455 | <String Id="Error1410" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð±Ñ–Ð»ÑŒÑˆÐ¸Ñ‚Ð¸ обÑÑг вільного міÑÑ†Ñ Ð² реєÑтрі. Ð”Ð»Ñ Ñ–Ð½ÑталÑції цього заÑтоÑунку в реєÑтрі має бути [2] КБ вільного міÑцÑ." /> | 455 | <String Id="Error1410" Overridable="yes" Value="Ðе вдалоÑÑŒ збільшити обÑÑг вільного міÑÑ†Ñ Ð² реєÑтрі. Ð”Ð»Ñ Ñ–Ð½ÑталÑції цього додатку в реєÑтрі має бути [2] КБ вільного міÑцÑ." /> |
| 456 | <String Id="Error1500" Overridable="yes" Value="ОдночаÑно триває інший Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції. Ðеобхідно завершити його, перш ніж продовжити цю інÑталÑцію." /> | 456 | <String Id="Error1500" Overridable="yes" Value="ОдночаÑно триває інший Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції. Ðеобхідно завершити його, перш ніж продовжити цю інÑталÑцію." /> |
| 457 | <String Id="Error1501" Overridable="yes" Value="Помилка доÑтупу до захищених даних. ПереконайтеÑÑ, що інÑталÑтор Windows наÑтроєно правильно, Ñ– повторіть інÑталÑцію." /> | 457 | <String Id="Error1501" Overridable="yes" Value="Помилка доÑтупу до захищених даних. ПереконайтеÑÑŒ, що інÑталÑтор Windows налаштован вірно, Ñ– повторіть інÑталÑцію." /> |
| 458 | <String Id="Error1502" Overridable="yes" Value="КориÑтувач "[2]" раніше вже починав інÑталÑцію продукту "[3]". Йому доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñвій Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції, щоб мати змогу кориÑтуватиÑÑ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¾Ð¼. Зараз продовжитьÑÑ Ð²Ð°Ñˆ поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції." /> | 458 | <String Id="Error1502" Overridable="yes" Value="КориÑтувач "[2]" раніше вже починав інÑталÑцію продукту "[3]". Йому доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñвій Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції, щоб мати змогу кориÑтуватиÑÑŒ продуктом. Зараз продовжитьÑÑ Ð²Ð°Ñˆ поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції." /> |
| 459 | <String Id="Error1503" Overridable="yes" Value="КориÑтувач "[2]" раніше вже починав інÑталÑцію продукту "[3]". Йому доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñвій Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції, щоб мати змогу кориÑтуватиÑÑ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¾Ð¼." /> | 459 | <String Id="Error1503" Overridable="yes" Value="КориÑтувач "[2]" раніше вже починав інÑталÑцію продукту "[3]". Йому доведетьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñвій Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ–Ð½ÑталÑції, щоб мати змогу кориÑтуватиÑÑ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¾Ð¼." /> |
| 460 | <String Id="Error1601" Overridable="yes" Value="Бракує міÑÑ†Ñ Ð½Ð° диÑку. Том: "[2]"; потрібно: [3] КБ; доÑтупно: [4] КБ. Звільніть міÑце на диÑку й повторіть Ñпробу." /> | 460 | <String Id="Error1601" Overridable="yes" Value="Бракує міÑÑ†Ñ Ð½Ð° диÑку. Том: "[2]"; потрібно: [3] КБ; доÑтупно: [4] КБ. Звільніть міÑце на диÑку й повторіть Ñпробу." /> |
| 461 | <String Id="Error1602" Overridable="yes" Value="Справді ÑкаÑувати?" /> | 461 | <String Id="Error1602" Overridable="yes" Value="Справді ÑкаÑувати?" /> |
| 462 | <String Id="Error1603" Overridable="yes" Value="Файл [2][3] зараз викориÑтовуєтьÑÑ{ в такому процеÑÑ–: ім’Ñ: [4], ідентифікатор: [5], заголовок вікна: "[6]"}. Закрийте цей заÑтоÑунок Ñ– повторіть Ñпробу." /> | 462 | <String Id="Error1603" Overridable="yes" Value="Файл [2][3] зараз викориÑтовуєтьÑÑ{ в такому процеÑÑ–: ім’Ñ: [4], ідентифікатор: [5], заголовок вікна: "[6]"}. Закрийте цей додаток Ñ– повторіть Ñпробу." /> |
| 463 | <String Id="Error1604" Overridable="yes" Value="Уже інÑтальовано продукт "[2]", неÑуміÑний із цим продуктом." /> | 463 | <String Id="Error1604" Overridable="yes" Value="Уже інÑтальовано продукт "[2]", неÑуміÑний із цим продуктом." /> |
| 464 | <String Id="Error1605" Overridable="yes" Value="У томі "[2]" бракує вільного міÑÑ†Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції з увімкнутим відновленнÑм. Потрібно [3] КБ, доÑтупно лише [4] КБ. Щоб продовжити інÑталÑцію без Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про відновленнÑ, натиÑніть кнопку "ПропуÑтити". Щоб знову перевірити обÑÑг вільного диÑкового проÑтору, натиÑніть кнопку "Повторити". Щоб вийти із програми інÑталÑції, натиÑніть кнопку "СкаÑувати"." /> | 464 | <String Id="Error1605" Overridable="yes" Value="У томі "[2]" бракує вільного міÑÑ†Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції з увімкнутим відновленнÑм. Потрібно [3] КБ, доÑтупно лише [4] КБ. Щоб продовжити інÑталÑцію без Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про відновленнÑ, натиÑніть кнопку "ПропуÑтити". Щоб знову перевірити обÑÑг вільного диÑкового проÑтору, натиÑніть кнопку "Повторити". Щоб вийти із програми інÑталÑції, натиÑніть кнопку "СкаÑувати"." /> |
| 465 | <String Id="Error1606" Overridable="yes" Value="Мережна папка "[2]" недоÑтупна." /> | 465 | <String Id="Error1606" Overridable="yes" Value="Мережева папка "[2]" недоÑтупна." /> |
| 466 | <String Id="Error1607" Overridable="yes" Value="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції необхідно закрити такі заÑтоÑунки:" /> | 466 | <String Id="Error1607" Overridable="yes" Value="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑталÑції необхідно закрити такі додатки:" /> |
| 467 | <String Id="Error1608" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ інÑтальовані на комп’ютері ÑуміÑні продукти Ð´Ð»Ñ Ñ–Ð½ÑталÑції цього продукту." /> | 467 | <String Id="Error1608" Overridable="yes" Value="Ðе вдалоÑÑŒ знайти інÑтальовані на комп’ютері ÑуміÑні продукти Ð´Ð»Ñ Ñ–Ð½ÑталÑції цього продукту." /> |
| 468 | <String Id="Error1609" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñтройок безпеки. [2] Ñ” неприпуÑтимим кориÑтувачем або групою. Можливо, ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пакета або помилка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ контролера домену мережі. Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі й натиÑніть кнопку "Повторити". Щоб завершити інÑталÑцію, натиÑніть кнопку "СкаÑувати". {{Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ідентифікатор SID кориÑтувача; ÑиÑтемна помилка [3]}}" /> | 468 | <String Id="Error1609" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ безпеки. [2] Ñ” неприпуÑтимим кориÑтувачем або групою. Можливо, ÑталаÑÑŒ помилка пакету або помилка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ контролеру домену мережі. Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі й натиÑніть кнопку "Повторити". Щоб завершити інÑталÑцію, натиÑніть кнопку "СкаÑувати". {{Ðе вдалоÑÑŒ знайти ідентифікатор SID кориÑтувача; ÑиÑтемна помилка [3]}}" /> |
| 469 | <String Id="Error1701" Overridable="yes" Value="Розділ "[2]" неприпуÑтимий. ПереконайтеÑÑ, що введено правильний розділ." /> | 469 | <String Id="Error1701" Overridable="yes" Value="Розділ "[2]" неприпуÑтимий. ПереконайтеÑÑŒ, що введено правильний розділ." /> |
| 470 | <String Id="Error1702" Overridable="yes" Value="Перед продовженнÑм наÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ [2] інÑталÑтору необхідно перезавантажити ÑиÑтему. Ð”Ð»Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Так". Щоб пізніше перезавантажити ÑиÑтему вручну, натиÑніть кнопку "ÐÑ–"." /> | 470 | <String Id="Error1702" Overridable="yes" Value="Перед продовженнÑм Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ [2] інÑталÑтору необхідно перезавантажити ÑиÑтему. Ð”Ð»Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Так". Щоб пізніше перезавантажити ÑиÑтему вручну, натиÑніть кнопку "ÐÑ–"." /> |
| 471 | <String Id="Error1703" Overridable="yes" Value="Щоб внеÑені до конфігурації [2] зміни набрали Ñили, необхідно перезавантажити ÑиÑтему. Ð”Ð»Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Так". Щоб пізніше перезавантажити ÑиÑтему вручну, натиÑніть кнопку "ÐÑ–"." /> | 471 | <String Id="Error1703" Overridable="yes" Value="Щоб внеÑені до конфігурації [2] зміни набрали Ñили, необхідно перезавантажити ÑиÑтему. Ð”Ð»Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Так". Щоб пізніше перезавантажити ÑиÑтему вручну, натиÑніть кнопку "ÐÑ–"." /> |
| 472 | <String Id="Error1704" Overridable="yes" Value="ІнÑталÑцію програми [2] наразі призупинено. Щоб продовжити, необхідно ÑкаÑувати зміни, внеÑені під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. СкаÑувати ці зміни?" /> | 472 | <String Id="Error1704" Overridable="yes" Value="ІнÑталÑцію програми [2] наразі призупинено. Щоб продовжити, необхідно ÑкаÑувати зміни, внеÑені під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. СкаÑувати ці зміни?" /> |
| 473 | <String Id="Error1705" Overridable="yes" Value="Ðе завершено попередню інÑталÑцію програми. Щоб продовжити, необхідно ÑкаÑувати зміни, внеÑені під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. СкаÑувати ці зміни?" /> | 473 | <String Id="Error1705" Overridable="yes" Value="Ðе завершено попередню інÑталÑцію програми. Щоб продовжити, необхідно ÑкаÑувати зміни, внеÑені під Ñ‡Ð°Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. СкаÑувати ці зміни?" /> |
| 474 | <String Id="Error1706" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ пакет інÑталÑції Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ [2]. Повторіть інÑталÑцію за допомогою дійÑної копії пакета інÑталÑції "[3]"." /> | 474 | <String Id="Error1706" Overridable="yes" Value="Ðе вдалоÑÑŒ знайти пакет інÑталÑції Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ [2]. Повторіть інÑталÑцію за допомогою дійÑної копії пакету інÑталÑції "[3]"." /> |
| 475 | <String Id="Error1707" Overridable="yes" Value="ІнÑталÑцію уÑпішно завершено." /> | 475 | <String Id="Error1707" Overridable="yes" Value="ІнÑталÑцію уÑпішно завершено." /> |
| 476 | <String Id="Error1708" Overridable="yes" Value="Помилка інÑталÑції." /> | 476 | <String Id="Error1708" Overridable="yes" Value="Помилка інÑталÑції." /> |
| 477 | <String Id="Error1709" Overridable="yes" Value="Продукт: [2] -- [3]" /> | 477 | <String Id="Error1709" Overridable="yes" Value="Продукт: [2] -- [3]" /> |
| 478 | <String Id="Error1710" Overridable="yes" Value="Можна повернути комп’ютер до попереднього Ñтану або продовжити інÑталÑцію згодом. Відновити попередній Ñтан?" /> | 478 | <String Id="Error1710" Overridable="yes" Value="Можна повернути комп’ютер до попереднього Ñтану або продовжити інÑталÑцію згодом. Відновити попередній Ñтан?" /> |
| 479 | <String Id="Error1711" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° диÑк відомоÑтей про інÑталÑцію. Перевірте, чи доÑтатньо міÑÑ†Ñ Ð½Ð° диÑку, Ñ– натиÑніть кнопку "Повторити", або натиÑніть кнопку "СкаÑувати", щоб завершити інÑталÑцію." /> | 479 | <String Id="Error1711" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° диÑк відомоÑтей про інÑталÑцію. Перевірте, чи доÑтатньо міÑÑ†Ñ Ð½Ð° диÑку, Ñ– натиÑніть кнопку "Повторити", або натиÑніть кнопку "СкаÑувати", щоб завершити інÑталÑцію." /> |
| 480 | <String Id="Error1712" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ принаймні один файл, необхідний Ð´Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ Ñтану комп’ютера. Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ." /> | 480 | <String Id="Error1712" Overridable="yes" Value="Ðе вдалоÑÑŒ знайти принаймні один файл, необхідний Ð´Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ Ñтану комп’ютера. Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ." /> |
| 481 | <String Id="Error1713" Overridable="yes" Value="[2] не вдалоÑÑ Ñ–Ð½Ñталювати один із потрібних продуктів. ЗвернітьÑÑ Ð´Ð¾ групи технічної підтримки. {{СиÑтемна помилка: [3].}}" /> | 481 | <String Id="Error1713" Overridable="yes" Value="[2] не вдалоÑÑŒ інÑталювати один із потрібних продуктів. ЗвернітьÑÑ Ð´Ð¾ групи технічної підтримки. {{СиÑтемна помилка: [3].}}" /> |
| 482 | <String Id="Error1714" Overridable="yes" Value="Стару верÑÑ–ÑŽ [2] не можна видалити. ЗвернітьÑÑ Ð´Ð¾ групи технічної підтримки. {{СиÑтемна помилка [3].}}" /> | 482 | <String Id="Error1714" Overridable="yes" Value="Стару верÑÑ–ÑŽ [2] не можна видалити. ЗвернітьÑÑ Ð´Ð¾ групи технічної підтримки. {{СиÑтемна помилка [3].}}" /> |
| 483 | <String Id="Error1715" Overridable="yes" Value="ІнÑтальовано [2]" /> | 483 | <String Id="Error1715" Overridable="yes" Value="ІнÑтальовано [2]" /> |
| 484 | <String Id="Error1716" Overridable="yes" Value="ÐаÑтроєно [2]" /> | 484 | <String Id="Error1716" Overridable="yes" Value="Ðалаштовано [2]" /> |
| 485 | <String Id="Error1717" Overridable="yes" Value="Видалено [2]" /> | 485 | <String Id="Error1717" Overridable="yes" Value="Видалено [2]" /> |
| 486 | <String Id="Error1718" Overridable="yes" Value="Файл [2] відхилено за політикою цифрового підпиÑу." /> | 486 | <String Id="Error1718" Overridable="yes" Value="Файл [2] відхилено за політикою цифрового підпиÑу." /> |
| 487 | <String Id="Error1719" Overridable="yes" Value="Служба інÑталÑтора Windows недоÑтупна. Це може ÑтатиÑÑ, Ñкщо Windows запущено в безпечному режимі або інÑталÑтор Windows інÑтальовано неправильно. ЗвернітьÑÑ Ð¿Ð¾ допомогу до Ñлужби підтримки." /> | 487 | <String Id="Error1719" Overridable="yes" Value="Служба інÑталÑтора Windows недоÑтупна. Це може ÑтатиÑÑ, Ñкщо Windows запущено в безпечному режимі або інÑталÑтор Windows інÑтальовано невірно. ЗвернітьÑÑ Ð¿Ð¾ допомогу до Ñлужби підтримки." /> |
| 488 | <String Id="Error1720" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пакета інÑталÑтора Windows. Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñценарій, потрібний Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакета. {{Додаткова Ð´Ñ–Ñ [2], помилка Ñценарію [3], [4]: [5] Ñ€Ñдок [6], Ñтовпець [7], [8] }}" /> | 488 | <String Id="Error1720" Overridable="yes" Value="СталаÑÑŒ помилка пакету інÑталÑтора Windows. Ðе вдалоÑÑŒ запуÑтити Ñценарій, потрібний Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакету. {{Додаткова Ð´Ñ–Ñ [2], помилка Ñценарію [3], [4]: [5] Ñ€Ñдок [6], Ñтовпчик [7], [8] }}" /> |
| 489 | <String Id="Error1721" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пакета інÑталÑтора Windows. Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити програму, потрібну Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакета. {{ДіÑ: [2], розташуваннÑ: [3], команда: [4] }}" /> | 489 | <String Id="Error1721" Overridable="yes" Value="СталаÑÑŒ помилка пакета інÑталÑтора Windows. Ðе вдалоÑÑŒ запуÑтити програму, потрібну Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакету. {{ДіÑ: [2], розташуваннÑ: [3], команда: [4] }}" /> |
| 490 | <String Id="Error1722" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пакета інÑталÑтора Windows. Програма, запущена у Ñкладі програми інÑталÑції, неправильно завершила роботу. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакета. {{Ð”Ñ–Ñ [2], розташуваннÑ: [3], команда: [4] }}" /> | 490 | <String Id="Error1722" Overridable="yes" Value="СталаÑÑŒ помилка пакета інÑталÑтора Windows. Програма, запущена у Ñкладі програми інÑталÑції, неправильно завершила роботу. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакету. {{Ð”Ñ–Ñ [2], розташуваннÑ: [3], команда: [4] }}" /> |
| 491 | <String Id="Error1723" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пакета інÑталÑтора Windows. Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити бібліотеку DLL, потрібну Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакета. {{Ð”Ñ–Ñ [2], елемент: [3], бібліотека: [4] }}" /> | 491 | <String Id="Error1723" Overridable="yes" Value="СталаÑÑŒ помилка пакета інÑталÑтора Windows. Ðе вдалоÑÑŒ запуÑтити бібліотеку DLL, потрібну Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки або поÑтачальника пакету. {{Ð”Ñ–Ñ [2], елемент: [3], бібліотека: [4] }}" /> |
| 492 | <String Id="Error1724" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно виконано." /> | 492 | <String Id="Error1724" Overridable="yes" Value="Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно виконано." /> |
| 493 | <String Id="Error1725" Overridable="yes" Value="Помилка видаленнÑ." /> | 493 | <String Id="Error1725" Overridable="yes" Value="Помилка видаленнÑ." /> |
| 494 | <String Id="Error1726" Overridable="yes" Value="ÐžÐ³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ ÑƒÑпішно завершено." /> | 494 | <String Id="Error1726" Overridable="yes" Value="ÐžÐ³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ ÑƒÑпішно завершено." /> |
| 495 | <String Id="Error1727" Overridable="yes" Value="Помилка оголошеннÑ." /> | 495 | <String Id="Error1727" Overridable="yes" Value="Помилка оголошеннÑ." /> |
| 496 | <String Id="Error1728" Overridable="yes" Value="ÐаÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ ÑƒÑпішно завершено." /> | 496 | <String Id="Error1728" Overridable="yes" Value="ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑпішно завершено." /> |
| 497 | <String Id="Error1729" Overridable="yes" Value="Помилка наÑтроюваннÑ." /> | 497 | <String Id="Error1729" Overridable="yes" Value="Помилка налаштуваннÑ." /> |
| 498 | <String Id="Error1730" Overridable="yes" Value="Ð”Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ заÑтоÑунку необхідні права адмініÑтратора. Щоб видалити цей заÑтоÑунок, ввійдіть до ÑиÑтеми із правами адмініÑтратора або звернітьÑÑ Ð¿Ð¾ допомогу до групи технічної підтримки." /> | 498 | <String Id="Error1730" Overridable="yes" Value="Ð”Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ додатку необхідні права адмініÑтратора. Щоб видалити цей додаток, увійдіть до ÑиÑтеми із правами адмініÑтратора або звернітьÑÑ Ð¿Ð¾ допомогу до групи технічної підтримки." /> |
| 499 | <String Id="Error1731" Overridable="yes" Value="Вихідний пакет інÑталÑції Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ [2] не Ñинхронізовано з пакетом клієнта. Повторіть інÑталÑцію за допомогою дійÑної копії пакета інÑталÑції "[3]"." /> | 499 | <String Id="Error1731" Overridable="yes" Value="Вихідний пакет інÑталÑції Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ [2] не Ñинхронізовано з пакетом клієнта. Повторіть інÑталÑцію за допомогою дійÑної копії пакету інÑталÑції "[3]"." /> |
| 500 | <String Id="Error1732" Overridable="yes" Value="Щоб завершити інÑталÑцію [2], необхідно перезавантажити комп’ютер. Інші кориÑтувачі не вишли із ÑиÑтеми, Ñ– внаÑлідок Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¾Ð½Ð¸ можуть втратити результати Ñвоєї роботи. Перезавантажити зараз?" /> | 500 | <String Id="Error1732" Overridable="yes" Value="Щоб завершити інÑталÑцію [2], необхідно перезавантажити комп’ютер. Інші кориÑтувачі не вишли із ÑиÑтеми, Ñ– внаÑлідок Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¾Ð½Ð¸ можуть втратити результати Ñвоєї роботи. Перезавантажити зараз?" /> |
| 501 | <String Id="Error1801" Overridable="yes" Value="ÐеприпуÑтимий шлÑÑ… "[2]". Укажіть правильний шлÑÑ…." /> | 501 | <String Id="Error1801" Overridable="yes" Value="ÐеприпуÑтимий шлÑÑ… "[2]". Вкажіть вірний шлÑÑ…." /> |
| 502 | <String Id="Error1802" Overridable="yes" Value="Бракує пам’Ñті. Закрийте інші заÑтоÑунки та повторіть Ñпробу." /> | 502 | <String Id="Error1802" Overridable="yes" Value="Бракує пам’Ñті. Закрийте інші додатки та повторіть Ñпробу." /> |
| 503 | <String Id="Error1803" Overridable="yes" Value="У приÑтрої [2] немає диÑка. Ð’Ñтавте диÑк Ñ– натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб повернутиÑÑ Ð´Ð¾ вибраного раніше тому." /> | 503 | <String Id="Error1803" Overridable="yes" Value="У приÑтрої [2] немає диÑку. Ð’Ñтавте диÑк Ñ– натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб повернутиÑÑ Ð´Ð¾ обраного раніше тому." /> |
| 504 | <String Id="Error1804" Overridable="yes" Value="У приÑтрої [2] немає диÑка. Ð’Ñтавте диÑк Ñ– натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб повернутиÑÑ Ð´Ð¾ вікна переглÑду папок Ñ– вибрати інший том." /> | 504 | <String Id="Error1804" Overridable="yes" Value="У приÑтрої [2] немає диÑку. Ð’Ñтавте диÑк Ñ– натиÑніть кнопку "Повторити" або натиÑніть кнопку "СкаÑувати", щоб повернутиÑÑŒ до вікна переглÑду папок Ñ– обрати інший том." /> |
| 505 | <String Id="Error1805" Overridable="yes" Value="Папка "[2]" не Ñ–Ñнує. Введіть шлÑÑ… до наÑвної папки." /> | 505 | <String Id="Error1805" Overridable="yes" Value="Папка "[2]" не Ñ–Ñнує. Введіть шлÑÑ… до наÑвної папки." /> |
| 506 | <String Id="Error1806" Overridable="yes" Value="У Ð²Ð°Ñ Ð½ÐµÐ´Ð¾Ñтатньо прав Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— папки." /> | 506 | <String Id="Error1806" Overridable="yes" Value="У Ð²Ð°Ñ Ð½ÐµÐ´Ð¾Ñтатньо прав Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— папки." /> |
| 507 | <String Id="Error1807" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ припуÑтиму папку Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ð½ÑталÑції." /> | 507 | <String Id="Error1807" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ припуÑтиму папку Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ð½ÑталÑції." /> |
| 508 | <String Id="Error1901" Overridable="yes" Value="СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· вихідної бази даних інÑталÑції: [2]." /> | 508 | <String Id="Error1901" Overridable="yes" Value="СталаÑÑŒ помилка під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· вихідної бази даних інÑталÑції: [2]." /> |
| 509 | <String Id="Error1902" Overridable="yes" Value="ÐŸÐ»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— перезавантаженнÑ: Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2] на [3]. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— потрібне перезавантаженнÑ." /> | 509 | <String Id="Error1902" Overridable="yes" Value="ÐŸÐ»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— перезавантаженнÑ: Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2] на [3]. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— потрібне перезавантаженнÑ." /> |
| 510 | <String Id="Error1903" Overridable="yes" Value="ÐŸÐ»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— перезавантаженнÑ: Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— потрібне перезавантаженнÑ." /> | 510 | <String Id="Error1903" Overridable="yes" Value="ÐŸÐ»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— перезавантаженнÑ: Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— потрібне перезавантаженнÑ." /> |
| 511 | <String Id="Error1904" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати модуль [2]. HRESULT [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 511 | <String Id="Error1904" Overridable="yes" Value="Ðе вдалоÑÑŒ зареєÑтрувати модуль [2]. HRESULT [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 512 | <String Id="Error1905" Overridable="yes" Value="Ðе вдалоÑÑ ÑкаÑувати реєÑтрацію Ð¼Ð¾Ð´ÑƒÐ»Ñ [2]. HRESULT [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 512 | <String Id="Error1905" Overridable="yes" Value="Ðе вдалоÑÑŒ ÑкаÑувати реєÑтрацію Ð¼Ð¾Ð´ÑƒÐ»Ñ [2]. HRESULT [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 513 | <String Id="Error1906" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÐµÑ‚Ð° [2]. Помилка: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 513 | <String Id="Error1906" Overridable="yes" Value="Ðе вдалоÑÑŒ виконати ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÐµÑ‚Ñƒ [2]. Помилка: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 514 | <String Id="Error1907" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати шрифт "[2]". ПереконайтеÑÑ, що ви маєте доÑтатні дозволи на інÑталÑцію шрифтів, а ÑиÑтема підтримує цей шрифт." /> | 514 | <String Id="Error1907" Overridable="yes" Value="Ðе вдалоÑÑŒ зареєÑтрувати шрифт "[2]". ПереконайтеÑÑŒ, що ви маєте доÑтатні дозволи на інÑталÑцію шрифтів, а ÑиÑтема підтримує цей шрифт." /> |
| 515 | <String Id="Error1908" Overridable="yes" Value="Ðе вдалоÑÑ ÑкаÑувати реєÑтрацію шрифту "[2]". ПереконайтеÑÑ, що ви маєте доÑтатні дозволи на Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ–Ð²." /> | 515 | <String Id="Error1908" Overridable="yes" Value="Ðе вдалоÑÑŒ ÑкаÑувати реєÑтрацію шрифту "[2]". ПереконайтеÑÑ, що ви маєте доÑтатні дозволи на Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ–Ð²." /> |
| 516 | <String Id="Error1909" Overridable="yes" Value="Ðе вдалоÑÑ Ñтворити Ñрлик [2]. ПереконайтеÑÑ, що папка Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ñнує та доÑтупна." /> | 516 | <String Id="Error1909" Overridable="yes" Value="Ðе вдалоÑÑŒ Ñтворити Ñрлик [2]. ПереконайтеÑÑŒ, що папка Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ñнує та доÑтупна." /> |
| 517 | <String Id="Error1910" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Ñрлик "[2]". ПереконайтеÑÑ, що файл Ñрлика Ñ–Ñнує та доÑтупний." /> | 517 | <String Id="Error1910" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити Ñрлик "[2]". ПереконайтеÑÑ, що файл Ñрлика Ñ–Ñнує та доÑтупний." /> |
| 518 | <String Id="Error1911" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати бібліотеку типів Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 518 | <String Id="Error1911" Overridable="yes" Value="Ðе вдалоÑÑŒ зареєÑтрувати бібліотеку типів Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 519 | <String Id="Error1912" Overridable="yes" Value="Ðе вдалоÑÑ ÑкаÑувати реєÑтрацію бібліотеки типів Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 519 | <String Id="Error1912" Overridable="yes" Value="Ðе вдалоÑÑŒ ÑкаÑувати реєÑтрацію бібліотеки типів Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ [2]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 520 | <String Id="Error1913" Overridable="yes" Value="Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ файл INI [2][3]. ПереконайтеÑÑ, що цей файл Ñ–Ñнує та доÑтупний." /> | 520 | <String Id="Error1913" Overridable="yes" Value="Ðе вдалоÑÑŒ оновити файл INI [2][3]. ПереконайтеÑÑŒ, що цей файл Ñ–Ñнує та доÑтупний." /> |
| 521 | <String Id="Error1914" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ð¿Ð»Ð°Ð½ÑƒÐ²Ð°Ñ‚Ð¸ Ð·Ð°Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [3] файлом [2] під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ. ПереконайтеÑÑ, що у Ð²Ð°Ñ Ñ” дозвіл на запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу [3]." /> | 521 | <String Id="Error1914" Overridable="yes" Value="Ðе вдалоÑÑŒ запланувати Ð·Ð°Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ [3] файлом [2] під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ. ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ñ” дозвіл на запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ файлу [3]." /> |
| 522 | <String Id="Error1915" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ диÑпетчер драйверів ODBC; помилка ODBC [2]: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 522 | <String Id="Error1915" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити диÑпетчер драйверів ODBC; помилка ODBC [2]: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 523 | <String Id="Error1916" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати диÑпетчер драйверів ODBC; помилка ODBC [2]: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 523 | <String Id="Error1916" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати диÑпетчер драйверів ODBC; помилка ODBC [2]: [3]. ЗвернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 524 | <String Id="Error1917" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ драйвер ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ñ–Ð² ODBC." /> | 524 | <String Id="Error1917" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити драйвер ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ñ–Ð² ODBC." /> |
| 525 | <String Id="Error1918" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати драйвер ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑ, що файл [4] Ñ–Ñнує та доÑтупний." /> | 525 | <String Id="Error1918" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати драйвер ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑŒ, що файл [4] Ñ–Ñнує та доÑтупний." /> |
| 526 | <String Id="Error1919" Overridable="yes" Value="Ðе вдалоÑÑ Ð½Ð°Ñтроїти джерело даних ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑ, що файл "[4]" Ñ–Ñнує та доÑтупний." /> | 526 | <String Id="Error1919" Overridable="yes" Value="Ðе вдалоÑÑŒ налаштувати джерело даних ODBC: [4]; помилка ODBC [2]: [3]. ПереконайтеÑÑŒ, що файл "[4]" Ñ–Ñнує та доÑтупний." /> |
| 527 | <String Id="Error1920" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу "[2]" ([3]). ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку ÑиÑтемних Ñлужб." /> | 527 | <String Id="Error1920" Overridable="yes" Value="Ðе вдалоÑÑŒ запуÑтити Ñлужбу "[2]" ([3]). ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку ÑиÑтемних Ñлужб." /> |
| 528 | <String Id="Error1921" Overridable="yes" Value="Ðе вдалоÑÑ Ð·ÑƒÐ¿Ð¸Ð½Ð¸Ñ‚Ð¸ Ñлужбу "[2]" ([3]). ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ ÑиÑтемних Ñлужб." /> | 528 | <String Id="Error1921" Overridable="yes" Value="Ðе вдалоÑÑŒ зупинити Ñлужбу "[2]" ([3]). ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ ÑиÑтемних Ñлужб." /> |
| 529 | <String Id="Error1922" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ Ñлужбу "[2]" ([3]). ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑиÑтемних Ñлужб." /> | 529 | <String Id="Error1922" Overridable="yes" Value="Ðе вдалоÑÑŒ видалити Ñлужбу "[2]" ([3]). ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÑиÑтемних Ñлужб." /> |
| 530 | <String Id="Error1923" Overridable="yes" Value="Ðе вдалоÑÑ Ñ–Ð½Ñталювати Ñлужбу "[2]" ([3]). ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ñ–Ð½ÑталÑції ÑиÑтемних Ñлужб." /> | 530 | <String Id="Error1923" Overridable="yes" Value="Ðе вдалоÑÑŒ інÑталювати Ñлужбу "[2]" ([3]). ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ñ–Ð½ÑталÑції ÑиÑтемних Ñлужб." /> |
| 531 | <String Id="Error1924" Overridable="yes" Value="Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ змінну Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ "[2]". ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— змінних оточеннÑ." /> | 531 | <String Id="Error1924" Overridable="yes" Value="Ðе вдалоÑÑŒ оновити змінну Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ "[2]". ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— змінних оточеннÑ." /> |
| 532 | <String Id="Error1925" Overridable="yes" Value="У Ð²Ð°Ñ Ð½ÐµÐ´Ð¾Ñтатньо прав, щоб завершити цю інÑталÑцію Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів комп’ютера. Ввійдіть до ÑиÑтеми Ñк адмініÑтратор Ñ– повторіть Ñпробу." /> | 532 | <String Id="Error1925" Overridable="yes" Value="У Ð²Ð°Ñ Ð½ÐµÐ´Ð¾Ñтатньо прав, щоб завершити цю інÑталÑцію Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів комп’ютера. Увійдіть до ÑиÑтеми Ñк адмініÑтратор Ñ– повторіть Ñпробу." /> |
| 533 | <String Id="Error1926" Overridable="yes" Value="Ðе вдалоÑÑ Ð²Ñтановити захиÑÑ‚ Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ "[3]". Помилка: [2]. ПереконайтеÑÑ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ–Ð² безпеки Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу." /> | 533 | <String Id="Error1926" Overridable="yes" Value="Ðе вдалоÑÑŒ вÑтановити захиÑÑ‚ Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ "[3]". Помилка: [2]. ПереконайтеÑÑŒ, що у Ð²Ð°Ñ Ð´Ð¾Ñтатньо прав Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ–Ð² безпеки Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу." /> |
| 534 | <String Id="Error1927" Overridable="yes" Value="Служби компонентів (COM+ 1.0) не інÑтальовано на цьому комп’ютері. Ð”Ð»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції потрібні Ñлужби компонентів. Служби компонентів доÑтупні в ÑиÑтемі Windows 2000." /> | 534 | <String Id="Error1927" Overridable="yes" Value="Служби компонентів (COM+ 1.0) не інÑтальовано на цьому комп’ютері. Ð”Ð»Ñ ÑƒÑпішного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— інÑталÑції потрібні Ñлужби компонентів. Служби компонентів доÑтупні в ÑиÑтемі Windows 2000." /> |
| 535 | <String Id="Error1928" Overridable="yes" Value="Помилка реєÑтрації заÑтоÑунку COM+. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 535 | <String Id="Error1928" Overridable="yes" Value="Помилка реєÑтрації заÑтоÑунку COM+. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 536 | <String Id="Error1929" Overridable="yes" Value="Помилка ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації заÑтоÑунку COM+. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> | 536 | <String Id="Error1929" Overridable="yes" Value="Помилка ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації заÑтоÑунку COM+. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ Ñлужби підтримки." /> |
| 537 | <String Id="Error1930" Overridable="yes" Value="Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ð¾Ð¿Ð¸Ñ Ð´Ð»Ñ Ñлужби "[2]" ([3])." /> | 537 | <String Id="Error1930" Overridable="yes" Value="Ðе вдалоÑÑŒ змінити Ð¾Ð¿Ð¸Ñ Ð´Ð»Ñ Ñлужби "[2]" ([3])." /> |
| 538 | <String Id="Error1931" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ ÑиÑтемний файл [2], оÑкільки його захищає ÑиÑтема Windows. Можливо, Ð´Ð»Ñ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ— роботи програми Ñлід оновити операційну ÑиÑтему. {{ВерÑÑ–Ñ Ð¿Ð°ÐºÐµÑ‚Ð°: [3], захищена операційною ÑиÑтемою верÑÑ–Ñ: [4]}}" /> | 538 | <String Id="Error1931" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑŒ оновити ÑиÑтемний файл [2], оÑкільки його захищає ÑиÑтема Windows. Можливо, Ð´Ð»Ñ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¾Ñ— роботи програми Ñлід оновити операційну ÑиÑтему. {{ВерÑÑ–Ñ Ð¿Ð°ÐºÐµÑ‚Ð°: [3], захищена операційною ÑиÑтемою верÑÑ–Ñ: [4]}}" /> |
| 539 | <String Id="Error1932" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ файл [2], захищений ÑиÑтемою Windows. {{ВерÑÑ–Ñ Ð¿Ð°ÐºÐµÑ‚Ð°: [3], захищена операційною ÑиÑтемою верÑÑ–Ñ: [4], помилка SFP: [5]}}" /> | 539 | <String Id="Error1932" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑŒ оновити файл [2], захищений ÑиÑтемою Windows. {{ВерÑÑ–Ñ Ð¿Ð°ÐºÐµÑ‚Ð°: [3], захищена операційною ÑиÑтемою верÑÑ–Ñ: [4], помилка SFP: [5]}}" /> |
| 540 | <String Id="Error1933" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ принаймні один файл, захищений ÑиÑтемою Windows. {{Помилка SFP: [2]. Перелік захищених файлів:\r\n[3]}}" /> | 540 | <String Id="Error1933" Overridable="yes" Value="ІнÑталÑтору Windows не вдалоÑÑŒ оновити принаймні один файл, захищений ÑиÑтемою Windows. {{Помилка SFP: [2]. Перелік захищених файлів:\r\n[3]}}" /> |
| 541 | <String Id="Error1934" Overridable="yes" Value="ІнÑталÑції кориÑтувачів заборонено за політикою цього комп’ютера." /> | 541 | <String Id="Error1934" Overridable="yes" Value="ІнÑталÑції кориÑтувачів заборонено за політикою цього комп’ютера." /> |
| 542 | <String Id="Error1935" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ довідки та Ñлужби підтримки. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> | 542 | <String Id="Error1935" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑŒ помилка. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ довідки та Ñлужби підтримки. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> |
| 543 | <String Id="Error1936" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Ð¡ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ð½Ðµ має належного імені або не підпиÑане ключем мінімальної довжини. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> | 543 | <String Id="Error1936" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑŒ помилка. Ð¡ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ð½Ðµ має належного імені або не підпиÑане ключем мінімальної довжини. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> |
| 544 | <String Id="Error1937" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. ÐŸÑ–Ð´Ð¿Ð¸Ñ Ð°Ð±Ð¾ каталог неприпуÑтимі, чи Ñ—Ñ… не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> | 544 | <String Id="Error1937" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑŒ помилка. ÐŸÑ–Ð´Ð¿Ð¸Ñ Ð°Ð±Ð¾ каталог неприпуÑтимі, чи Ñ—Ñ… не вдалоÑÑŒ перевірити. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> |
| 545 | <String Id="Error1938" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ принаймні один модуль ÑкладаннÑ. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> | 545 | <String Id="Error1938" Overridable="yes" Value="Під Ñ‡Ð°Ñ Ñ–Ð½ÑталÑції ÑÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ "[6]" ÑталаÑÑŒ помилка. Ðе вдалоÑÑŒ знайти принаймні один модуль ÑкладаннÑ. HRESULT: [3]. {{Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑкладаннÑ: [4], функціÑ: [5], компонент: [2]}}" /> |
| 546 | 546 | ||
| 547 | <String Id="UITextbytes" Overridable="yes" Value="байт" /> | 547 | <String Id="UITextbytes" Overridable="yes" Value="байт" /> |
| 548 | <String Id="UITextGB" Overridable="yes" Value="ГБ" /> | 548 | <String Id="UITextGB" Overridable="yes" Value="ГБ" /> |
| @@ -557,9 +557,9 @@ | |||
| 557 | <String Id="UITextMenuLocal" Overridable="yes" Value="Буде інÑтальовано на локальний жорÑткий диÑк" /> | 557 | <String Id="UITextMenuLocal" Overridable="yes" Value="Буде інÑтальовано на локальний жорÑткий диÑк" /> |
| 558 | <String Id="UITextMenuNetwork" Overridable="yes" Value="Буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> | 558 | <String Id="UITextMenuNetwork" Overridable="yes" Value="Буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> |
| 559 | <String Id="UITextNewFolder" Overridable="yes" Value="Папка|Ðова папка" /> | 559 | <String Id="UITextNewFolder" Overridable="yes" Value="Папка|Ðова папка" /> |
| 560 | <String Id="UITextScriptInProgress" Overridable="yes" Value="Триває Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¸Ñ… даних..." /> | 560 | <String Id="UITextScriptInProgress" Overridable="yes" Value="Триває збір потрібних даних..." /> |
| 561 | <String Id="UITextSelAbsentAbsent" Overridable="yes" Value="Цей компонент не буде інÑтальовано" /> | 561 | <String Id="UITextSelAbsentAbsent" Overridable="yes" Value="Цей компонент не буде інÑтальовано" /> |
| 562 | <String Id="UITextSelAbsentAdvertise" Overridable="yes" Value="Цей компонент буде наÑтроєно Ð´Ð»Ñ Ñ–Ð½ÑталÑції в разі потреби" /> | 562 | <String Id="UITextSelAbsentAdvertise" Overridable="yes" Value="Цей компонент буде налаштовано Ð´Ð»Ñ Ñ–Ð½ÑталÑції в разі потреби" /> |
| 563 | <String Id="UITextSelAbsentCD" Overridable="yes" Value="Цей компонент буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з компакт-диÑка" /> | 563 | <String Id="UITextSelAbsentCD" Overridable="yes" Value="Цей компонент буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з компакт-диÑка" /> |
| 564 | <String Id="UITextSelAbsentLocal" Overridable="yes" Value="Цей компонент буде інÑтальовано на локальний жорÑткий диÑк" /> | 564 | <String Id="UITextSelAbsentLocal" Overridable="yes" Value="Цей компонент буде інÑтальовано на локальний жорÑткий диÑк" /> |
| 565 | <String Id="UITextSelAbsentNetwork" Overridable="yes" Value="Цей компонент буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> | 565 | <String Id="UITextSelAbsentNetwork" Overridable="yes" Value="Цей компонент буде інÑтальовано Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> |
| @@ -576,7 +576,7 @@ | |||
| 576 | <String Id="UITextSelChildCostPos" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку." /> | 576 | <String Id="UITextSelChildCostPos" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку." /> |
| 577 | <String Id="UITextSelCostPending" Overridable="yes" Value="Триває обчиÑÐ»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°..." /> | 577 | <String Id="UITextSelCostPending" Overridable="yes" Value="Триває обчиÑÐ»ÐµÐ½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°..." /> |
| 578 | <String Id="UITextSelLocalAbsent" Overridable="yes" Value="Цей компонент буде повніÑтю видалено" /> | 578 | <String Id="UITextSelLocalAbsent" Overridable="yes" Value="Цей компонент буде повніÑтю видалено" /> |
| 579 | <String Id="UITextSelLocalAdvertise" Overridable="yes" Value="Цей компонент буде видалено з локального жорÑткого диÑка, але наÑтроєно Ð´Ð»Ñ Ñ–Ð½ÑталÑції в разі потреби" /> | 579 | <String Id="UITextSelLocalAdvertise" Overridable="yes" Value="Цей компонент буде видалено з локального жорÑткого диÑка, але налаштовано Ð´Ð»Ñ Ñ–Ð½ÑталÑції в разі потреби" /> |
| 580 | <String Id="UITextSelLocalCD" Overridable="yes" Value="Компонент буде видалено з локального жорÑткого диÑка, але він залишитьÑÑ Ð´Ð¾Ñтупним Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з компакт-диÑка" /> | 580 | <String Id="UITextSelLocalCD" Overridable="yes" Value="Компонент буде видалено з локального жорÑткого диÑка, але він залишитьÑÑ Ð´Ð¾Ñтупним Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з компакт-диÑка" /> |
| 581 | <String Id="UITextSelLocalLocal" Overridable="yes" Value="Цей компонент залишитьÑÑ Ð½Ð° локальному жорÑткому диÑку" /> | 581 | <String Id="UITextSelLocalLocal" Overridable="yes" Value="Цей компонент залишитьÑÑ Ð½Ð° локальному жорÑткому диÑку" /> |
| 582 | <String Id="UITextSelLocalNetwork" Overridable="yes" Value="Компонент буде видалено з локального жорÑткого диÑка, але він залишитьÑÑ Ð´Ð¾Ñтупним Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> | 582 | <String Id="UITextSelLocalNetwork" Overridable="yes" Value="Компонент буде видалено з локального жорÑткого диÑка, але він залишитьÑÑ Ð´Ð¾Ñтупним Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> |
| @@ -585,7 +585,7 @@ | |||
| 585 | <String Id="UITextSelNetworkLocal" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента запуÑк із мережі буде замінено на інÑталÑцію на локальний жорÑткий диÑк" /> | 585 | <String Id="UITextSelNetworkLocal" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента запуÑк із мережі буде замінено на інÑталÑцію на локальний жорÑткий диÑк" /> |
| 586 | <String Id="UITextSelNetworkNetwork" Overridable="yes" Value="Цей компонент залишитьÑÑ Ð´Ð¾Ñтупний Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> | 586 | <String Id="UITextSelNetworkNetwork" Overridable="yes" Value="Цей компонент залишитьÑÑ Ð´Ð¾Ñтупний Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку з мережі" /> |
| 587 | <String Id="UITextSelParentCostNegNeg" Overridable="yes" Value="Цей компонент звільнÑÑ” [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Ці чаÑтини звільнÑють [4] на жорÑткому диÑку." /> | 587 | <String Id="UITextSelParentCostNegNeg" Overridable="yes" Value="Цей компонент звільнÑÑ” [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Ці чаÑтини звільнÑють [4] на жорÑткому диÑку." /> |
| 588 | <String Id="UITextSelParentCostNegPos" Overridable="yes" Value="Компонент звільнÑÑ” [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Разом вони потребують [4] на жорÑткому диÑку." /> | 588 | <String Id="UITextSelParentCostNegPos" Overridable="yes" Value="Компонент звільнÑÑ” [1] на жорÑткому диÑку. Обрано [2] з [3] його чаÑтин. Разом вони потребують [4] на жорÑткому диÑку." /> |
| 589 | <String Id="UITextSelParentCostPosNeg" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Разом вони звільнÑть [4] на жорÑткому диÑку." /> | 589 | <String Id="UITextSelParentCostPosNeg" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Разом вони звільнÑть [4] на жорÑткому диÑку." /> |
| 590 | <String Id="UITextSelParentCostPosPos" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Разом вони потребують [4] на жорÑткому диÑку." /> | 590 | <String Id="UITextSelParentCostPosPos" Overridable="yes" Value="Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ компонента потрібно [1] на жорÑткому диÑку. Вибрано [2] з [3] його чаÑтин. Разом вони потребують [4] на жорÑткому диÑку." /> |
| 591 | <String Id="UITextTimeRemaining" Overridable="yes" Value="ЗалишилоÑÑŒ чаÑу: {[1] хв. }{[2] Ñек.}" /> | 591 | <String Id="UITextTimeRemaining" Overridable="yes" Value="ЗалишилоÑÑŒ чаÑу: {[1] хв. }{[2] Ñек.}" /> |
diff --git a/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h b/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h index 45e4fc51..14e20c0d 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h | |||
| @@ -567,6 +567,19 @@ void DAPI ThemeInitializeWindowClass( | |||
| 567 | ); | 567 | ); |
| 568 | 568 | ||
| 569 | /******************************************************************** | 569 | /******************************************************************** |
| 570 | ThemeInitializeWindowClassEx - sets defaults for the window class | ||
| 571 | from the given theme. | ||
| 572 | |||
| 573 | *******************************************************************/ | ||
| 574 | void DAPI ThemeInitializeWindowClassEx( | ||
| 575 | __in THEME* pTheme, | ||
| 576 | __in WNDCLASSEXW* pWndClass, | ||
| 577 | __in WNDPROC pfnWndProc, | ||
| 578 | __in HINSTANCE hInstance, | ||
| 579 | __in LPCWSTR wzClassName | ||
| 580 | ); | ||
| 581 | |||
| 582 | /******************************************************************** | ||
| 570 | ThemeCreateParentWindow - creates a parent window for the theme. | 583 | ThemeCreateParentWindow - creates a parent window for the theme. |
| 571 | 584 | ||
| 572 | *******************************************************************/ | 585 | *******************************************************************/ |
diff --git a/src/libs/dutil/WixToolset.DUtil/thmutil.cpp b/src/libs/dutil/WixToolset.DUtil/thmutil.cpp index a7a7e45b..4482c96e 100644 --- a/src/libs/dutil/WixToolset.DUtil/thmutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/thmutil.cpp | |||
| @@ -856,6 +856,28 @@ DAPI_(void) ThemeInitializeWindowClass( | |||
| 856 | } | 856 | } |
| 857 | 857 | ||
| 858 | 858 | ||
| 859 | DAPI_(void) ThemeInitializeWindowClassEx( | ||
| 860 | __in THEME* pTheme, | ||
| 861 | __in WNDCLASSEXW* pWndClass, | ||
| 862 | __in WNDPROC pfnWndProc, | ||
| 863 | __in HINSTANCE hInstance, | ||
| 864 | __in LPCWSTR wzClassName | ||
| 865 | ) | ||
| 866 | { | ||
| 867 | pWndClass->cbSize = sizeof(WNDCLASSEXW); | ||
| 868 | pWndClass->style = CS_HREDRAW | CS_VREDRAW; | ||
| 869 | pWndClass->cbWndExtra = DLGWINDOWEXTRA; | ||
| 870 | pWndClass->hCursor = ::LoadCursorW(NULL, (LPCWSTR)IDC_ARROW); | ||
| 871 | |||
| 872 | pWndClass->lpfnWndProc = pfnWndProc; | ||
| 873 | pWndClass->hInstance = hInstance; | ||
| 874 | pWndClass->lpszClassName = wzClassName; | ||
| 875 | |||
| 876 | pWndClass->hIcon = reinterpret_cast<HICON>(pTheme->hIcon); | ||
| 877 | pWndClass->hbrBackground = pTheme->rgFonts[pTheme->dwFontId].hBackground; | ||
| 878 | } | ||
| 879 | |||
| 880 | |||
| 859 | DAPI_(HRESULT) ThemeCreateParentWindow( | 881 | DAPI_(HRESULT) ThemeCreateParentWindow( |
| 860 | __in THEME* pTheme, | 882 | __in THEME* pTheme, |
| 861 | __in DWORD dwExStyle, | 883 | __in DWORD dwExStyle, |
diff --git a/src/test/burn/TestData/FilesInUseTests/WixStdBaBundle/WixStdBaBundle.wixproj b/src/test/burn/TestData/FilesInUseTests/WixStdBaBundle/WixStdBaBundle.wixproj index 1d3d6f17..01b2401d 100644 --- a/src/test/burn/TestData/FilesInUseTests/WixStdBaBundle/WixStdBaBundle.wixproj +++ b/src/test/burn/TestData/FilesInUseTests/WixStdBaBundle/WixStdBaBundle.wixproj | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | </PropertyGroup> | 7 | </PropertyGroup> |
| 8 | <ItemGroup> | 8 | <ItemGroup> |
| 9 | <Compile Include="..\..\WixStdBaTests\BundleA\Bundle.wxs" Link="Bundle.wxs" /> | 9 | <Compile Include="..\..\WixStdBaTests\BundleA\Bundle.wxs" Link="Bundle.wxs" /> |
| 10 | <BindPath Include="..\..\WixStdBaTests\BundleA" /> | ||
| 10 | </ItemGroup> | 11 | </ItemGroup> |
| 11 | <ItemGroup> | 12 | <ItemGroup> |
| 12 | <ProjectReference Include="..\PackageA\PackageA.wixproj" /> | 13 | <ProjectReference Include="..\PackageA\PackageA.wixproj" /> |
diff --git a/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs b/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs index 34071cad..78bda768 100644 --- a/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs +++ b/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | <!-- 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. --> | 1 | <!-- 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. --> |
| 2 | 2 | ||
| 3 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | 3 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> |
| 4 | <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.TestVersion)" UpgradeCode="$(var.UpgradeCode)" Compressed="yes" bal:CommandLineVariables="caseSensitive"> | 4 | <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.TestVersion)" UpgradeCode="$(var.UpgradeCode)" |
| 5 | IconSourceFile="test.ico" Compressed="yes" bal:CommandLineVariables="caseSensitive"> | ||
| 5 | <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" /> | 6 | <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" /> |
| 6 | 7 | ||
| 7 | <?ifndef UpdateFeed ?> | 8 | <?ifndef UpdateFeed ?> |
diff --git a/src/test/burn/TestData/WixStdBaTests/BundleA/test.ico b/src/test/burn/TestData/WixStdBaTests/BundleA/test.ico new file mode 100644 index 00000000..906ce324 --- /dev/null +++ b/src/test/burn/TestData/WixStdBaTests/BundleA/test.ico | |||
| Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj index eb01e716..ce25922b 100644 --- a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | </PropertyGroup> | 7 | </PropertyGroup> |
| 8 | <ItemGroup> | 8 | <ItemGroup> |
| 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 10 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 10 | <ProjectReference Include="..\Components\TestComponentNET3\TestComponentNET3.csproj" /> | 11 | <ProjectReference Include="..\Components\TestComponentNET3\TestComponentNET3.csproj" /> |
| 11 | </ItemGroup> | 12 | </ItemGroup> |
| 12 | <ItemGroup> | 13 | <ItemGroup> |
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj index 629bda1f..164071c3 100644 --- a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | </PropertyGroup> | 7 | </PropertyGroup> |
| 8 | <ItemGroup> | 8 | <ItemGroup> |
| 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 10 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 10 | <ProjectReference Include="..\Components\TestComponentNET4\TestComponentNET4.csproj" /> | 11 | <ProjectReference Include="..\Components\TestComponentNET4\TestComponentNET4.csproj" /> |
| 11 | </ItemGroup> | 12 | </ItemGroup> |
| 12 | <ItemGroup> | 13 | <ItemGroup> |
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj index 35bfd38d..8b84e27e 100644 --- a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | </PropertyGroup> | 7 | </PropertyGroup> |
| 8 | <ItemGroup> | 8 | <ItemGroup> |
| 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 10 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 10 | <ProjectReference Include="..\Components\TestComponentNative\TestComponentNative.vcxproj" /> | 11 | <ProjectReference Include="..\Components\TestComponentNative\TestComponentNative.vcxproj" /> |
| 11 | </ItemGroup> | 12 | </ItemGroup> |
| 12 | <ItemGroup> | 13 | <ItemGroup> |
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj index 35bfd38d..8b84e27e 100644 --- a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | </PropertyGroup> | 7 | </PropertyGroup> |
| 8 | <ItemGroup> | 8 | <ItemGroup> |
| 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 10 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 10 | <ProjectReference Include="..\Components\TestComponentNative\TestComponentNative.vcxproj" /> | 11 | <ProjectReference Include="..\Components\TestComponentNative\TestComponentNative.vcxproj" /> |
| 11 | </ItemGroup> | 12 | </ItemGroup> |
| 12 | <ItemGroup> | 13 | <ItemGroup> |
diff --git a/src/test/msi/TestData/CustomActionFail/CustomActionFail.csproj b/src/test/msi/TestData/CustomActionFail/CustomActionFail.csproj new file mode 100644 index 00000000..3db8bd21 --- /dev/null +++ b/src/test/msi/TestData/CustomActionFail/CustomActionFail.csproj | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | <Project Sdk="Microsoft.NET.Sdk"> | ||
| 2 | |||
| 3 | <PropertyGroup> | ||
| 4 | <OutputType>Exe</OutputType> | ||
| 5 | <TargetFramework>net48</TargetFramework> | ||
| 6 | <LangVersion>9.0</LangVersion> | ||
| 7 | </PropertyGroup> | ||
| 8 | |||
| 9 | </Project> | ||
diff --git a/src/test/msi/TestData/CustomActionFail/Program.cs b/src/test/msi/TestData/CustomActionFail/Program.cs new file mode 100644 index 00000000..f2f00a8a --- /dev/null +++ b/src/test/msi/TestData/CustomActionFail/Program.cs | |||
| @@ -0,0 +1 @@ | |||
| return -1; | |||
diff --git a/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj index b39f7387..3b9205f6 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj index b1770b0f..94fb85e4 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj index 3c6ef5cf..2f492a72 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj index 38d94265..046dc6ec 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj index b1770b0f..94fb85e4 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj index 4a9c9dbd..c6d041c6 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj index b1770b0f..94fb85e4 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj index b1770b0f..94fb85e4 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Firewall.wixext" /> | 12 | <PackageReference Include="WixToolset.Firewall.wixext" /> |
diff --git a/src/test/msi/TestData/MsmqExtensionTests/MsmqInstall/MsmqInstall.wixproj b/src/test/msi/TestData/MsmqExtensionTests/MsmqInstall/MsmqInstall.wixproj index 41e39944..b75046c9 100644 --- a/src/test/msi/TestData/MsmqExtensionTests/MsmqInstall/MsmqInstall.wixproj +++ b/src/test/msi/TestData/MsmqExtensionTests/MsmqInstall/MsmqInstall.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Msmq.wixext" /> | 12 | <PackageReference Include="WixToolset.Msmq.wixext" /> |
diff --git a/src/test/msi/TestData/RemoveFolderExTests/RemoveFolderExTest/RemoveFolderExTest.wixproj b/src/test/msi/TestData/RemoveFolderExTests/RemoveFolderExTest/RemoveFolderExTest.wixproj index 1c71388a..f02f82f4 100644 --- a/src/test/msi/TestData/RemoveFolderExTests/RemoveFolderExTest/RemoveFolderExTest.wixproj +++ b/src/test/msi/TestData/RemoveFolderExTests/RemoveFolderExTest/RemoveFolderExTest.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/Templates/CustomActionFail.exe b/src/test/msi/TestData/Templates/CustomActionFail.exe deleted file mode 100644 index cceffe91..00000000 --- a/src/test/msi/TestData/Templates/CustomActionFail.exe +++ /dev/null | |||
| Binary files differ | |||
diff --git a/src/test/msi/TestData/Templates/Product.wxs b/src/test/msi/TestData/Templates/Product.wxs index 8fb90fed..a9edab87 100644 --- a/src/test/msi/TestData/Templates/Product.wxs +++ b/src/test/msi/TestData/Templates/Product.wxs | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | 39 | ||
| 40 | <Fragment> | 40 | <Fragment> |
| 41 | <Component Id="FileComponent" Guid="12345678-9ABC-DEF0-1234-567890000000" Directory="INSTALLFOLDER"> | 41 | <Component Id="FileComponent" Guid="12345678-9ABC-DEF0-1234-567890000000" Directory="INSTALLFOLDER"> |
| 42 | <File Id="CAFile" Name="CustomActionFail.exe" Source="$(sys.SOURCEFILEDIR)\CustomActionFail.exe" /> | 42 | <File Id="CAFile" Source="CustomActionFail.exe" /> |
| 43 | </Component> | 43 | </Component> |
| 44 | 44 | ||
| 45 | <CustomAction Id="CaFail" FileRef="CAFile" Execute="immediate" Return="check" ExeCommand="" /> | 45 | <CustomAction Id="CaFail" FileRef="CAFile" Execute="immediate" Return="check" ExeCommand="" /> |
diff --git a/src/test/msi/TestData/UIExtensionTests/LocalizedWixUI/LocalizedWixUI.wixproj b/src/test/msi/TestData/UIExtensionTests/LocalizedWixUI/LocalizedWixUI.wixproj index cb8f31bb..b8a95efe 100644 --- a/src/test/msi/TestData/UIExtensionTests/LocalizedWixUI/LocalizedWixUI.wixproj +++ b/src/test/msi/TestData/UIExtensionTests/LocalizedWixUI/LocalizedWixUI.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.UI.wixext" /> | 12 | <PackageReference Include="WixToolset.UI.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductA/ProductA.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductA/ProductA.wixproj index 3895b853..96c29c60 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductA/ProductA.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductA/ProductA.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductAddCommentToExistingGroup/ProductAddCommentToExistingGroup.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductAddCommentToExistingGroup/ProductAddCommentToExistingGroup.wixproj index 5938e525..21bfc1c6 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductAddCommentToExistingGroup/ProductAddCommentToExistingGroup.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductAddCommentToExistingGroup/ProductAddCommentToExistingGroup.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentDelete/ProductCommentDelete.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentDelete/ProductCommentDelete.wixproj index 63bb2370..cc06e0b2 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentDelete/ProductCommentDelete.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentDelete/ProductCommentDelete.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentFail/ProductCommentFail.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentFail/ProductCommentFail.wixproj index 66f308ae..b83b65e5 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentFail/ProductCommentFail.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductCommentFail/ProductCommentFail.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductFail/ProductFail.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductFail/ProductFail.wixproj index e2fe3aa8..ae630e84 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductFail/ProductFail.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductFail/ProductFail.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductFailIfExists/ProductFailIfExists.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductFailIfExists/ProductFailIfExists.wixproj index 9e1a836f..779d8f67 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductFailIfExists/ProductFailIfExists.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductFailIfExists/ProductFailIfExists.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNestedGroups/ProductNestedGroups.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNestedGroups/ProductNestedGroups.wixproj index 3b2e3942..f49f3bfe 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNestedGroups/ProductNestedGroups.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNestedGroups/ProductNestedGroups.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNewGroupWithComment/ProductNewGroupWithComment.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNewGroupWithComment/ProductNewGroupWithComment.wixproj index aeac903a..2a050fd2 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNewGroupWithComment/ProductNewGroupWithComment.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNewGroupWithComment/ProductNewGroupWithComment.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNonVitalGroup/ProductNonVitalUserGroup.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNonVitalGroup/ProductNonVitalUserGroup.wixproj index 8734224d..92e46dd3 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductNonVitalGroup/ProductNonVitalUserGroup.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductNonVitalGroup/ProductNonVitalUserGroup.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj index e4a01a3a..c6b80835 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionGroupTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj b/src/test/msi/TestData/UtilExtensionGroupTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj index 93a56216..e8fe0593 100644 --- a/src/test/msi/TestData/UtilExtensionGroupTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj +++ b/src/test/msi/TestData/UtilExtensionGroupTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductA/ProductA.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductA/ProductA.wixproj index 3895b853..96c29c60 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductA/ProductA.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductA/ProductA.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductAddCommentToExistingUser/ProductAddCommentToExistingUser.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductAddCommentToExistingUser/ProductAddCommentToExistingUser.wixproj index 5938e525..21bfc1c6 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductAddCommentToExistingUser/ProductAddCommentToExistingUser.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductAddCommentToExistingUser/ProductAddCommentToExistingUser.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentDelete/ProductCommentDelete.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentDelete/ProductCommentDelete.wixproj index 63bb2370..cc06e0b2 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentDelete/ProductCommentDelete.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentDelete/ProductCommentDelete.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentFail/ProductCommentFail.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentFail/ProductCommentFail.wixproj index 66f308ae..b83b65e5 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentFail/ProductCommentFail.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductCommentFail/ProductCommentFail.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductFail/ProductFail.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductFail/ProductFail.wixproj index e2fe3aa8..ae630e84 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductFail/ProductFail.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductFail/ProductFail.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductFailIfExists/ProductFailIfExists.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductFailIfExists/ProductFailIfExists.wixproj index 9e1a836f..779d8f67 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductFailIfExists/ProductFailIfExists.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductFailIfExists/ProductFailIfExists.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductNewUserWithComment/ProductNewUserWithComment.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductNewUserWithComment/ProductNewUserWithComment.wixproj index aeac903a..4a681f82 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductNewUserWithComment/ProductNewUserWithComment.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductNewUserWithComment/ProductNewUserWithComment.wixproj | |||
| @@ -6,7 +6,8 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | </ItemGroup> | 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> |
| 10 | </ItemGroup> | ||
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
| 12 | </ItemGroup> | 13 | </ItemGroup> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductNonVitalUserGroup/ProductNonVitalUserGroup.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductNonVitalUserGroup/ProductNonVitalUserGroup.wixproj index 8734224d..92e46dd3 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductNonVitalUserGroup/ProductNonVitalUserGroup.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductNonVitalUserGroup/ProductNonVitalUserGroup.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj index e4a01a3a..c6b80835 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductRestrictedDomain/ProductRestrictedDomain.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/test/msi/TestData/UtilExtensionUserTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj b/src/test/msi/TestData/UtilExtensionUserTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj index 93a56216..e8fe0593 100644 --- a/src/test/msi/TestData/UtilExtensionUserTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj +++ b/src/test/msi/TestData/UtilExtensionUserTests/ProductWithCommandLineParameters/ProductWithCommandLineParameters.wixproj | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | </PropertyGroup> | 6 | </PropertyGroup> |
| 7 | <ItemGroup> | 7 | <ItemGroup> |
| 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | 8 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> |
| 9 | <ProjectReference Include="..\..\CustomActionFail\CustomActionFail.csproj" /> | ||
| 9 | </ItemGroup> | 10 | </ItemGroup> |
| 10 | <ItemGroup> | 11 | <ItemGroup> |
| 11 | <PackageReference Include="WixToolset.Util.wixext" /> | 12 | <PackageReference Include="WixToolset.Util.wixext" /> |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateWindowsInstallerDataFromIRCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateWindowsInstallerDataFromIRCommand.cs index f2d70f2b..1665ced3 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateWindowsInstallerDataFromIRCommand.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateWindowsInstallerDataFromIRCommand.cs | |||
| @@ -62,7 +62,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 62 | 62 | ||
| 63 | private void AddSectionToData() | 63 | private void AddSectionToData() |
| 64 | { | 64 | { |
| 65 | var cellsByTableAndRowId = new Dictionary<string, List<WixCustomTableCellSymbol>>(); | 65 | var directoryRowsById = new Dictionary<string, Row>(StringComparer.Ordinal); |
| 66 | var cellsByTableAndRowId = new Dictionary<string, List<WixCustomTableCellSymbol>>(StringComparer.Ordinal); | ||
| 66 | 67 | ||
| 67 | foreach (var symbol in this.Section.Symbols) | 68 | foreach (var symbol in this.Section.Symbols) |
| 68 | { | 69 | { |
| @@ -107,7 +108,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 107 | break; | 108 | break; |
| 108 | 109 | ||
| 109 | case SymbolDefinitionType.Directory: | 110 | case SymbolDefinitionType.Directory: |
| 110 | this.AddDirectorySymbol((DirectorySymbol)symbol); | 111 | this.AddDirectorySymbol((DirectorySymbol)symbol, directoryRowsById); |
| 111 | break; | 112 | break; |
| 112 | 113 | ||
| 113 | case SymbolDefinitionType.DuplicateFile: | 114 | case SymbolDefinitionType.DuplicateFile: |
| @@ -497,9 +498,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 497 | this.Data.EnsureTable(this.TableDefinitions["ListBox"]); | 498 | this.Data.EnsureTable(this.TableDefinitions["ListBox"]); |
| 498 | } | 499 | } |
| 499 | 500 | ||
| 500 | private void AddDirectorySymbol(DirectorySymbol symbol) | 501 | private void AddDirectorySymbol(DirectorySymbol symbol, Dictionary<string, Row> directoryRowsById) |
| 501 | { | 502 | { |
| 502 | (var name, var parentDir) = this.AddDirectorySubdirectories(symbol); | 503 | (var name, var parentDir) = this.AddDirectorySubdirectories(symbol, directoryRowsById); |
| 503 | 504 | ||
| 504 | var shortName = symbol.ShortName; | 505 | var shortName = symbol.ShortName; |
| 505 | var sourceShortname = symbol.SourceShortName; | 506 | var sourceShortname = symbol.SourceShortName; |
| @@ -524,10 +525,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 524 | 525 | ||
| 525 | var defaultDir = String.IsNullOrEmpty(sourceName) || sourceName == targetName ? targetName : targetName + ":" + sourceName; | 526 | var defaultDir = String.IsNullOrEmpty(sourceName) || sourceName == targetName ? targetName : targetName + ":" + sourceName; |
| 526 | 527 | ||
| 527 | var row = this.CreateRow(symbol, "Directory"); | 528 | this.CreateOrAddDirectoryRow(directoryRowsById, symbol, symbol.Id.Id, parentDir, defaultDir); |
| 528 | row[0] = symbol.Id.Id; | ||
| 529 | row[1] = parentDir; | ||
| 530 | row[2] = defaultDir; | ||
| 531 | 529 | ||
| 532 | if (OutputType.Module == this.Data.Type) | 530 | if (OutputType.Module == this.Data.Type) |
| 533 | { | 531 | { |
| @@ -1146,7 +1144,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1146 | } | 1144 | } |
| 1147 | else | 1145 | else |
| 1148 | { | 1146 | { |
| 1149 | var after = (null == symbol.Before); | 1147 | var after = null == symbol.Before; |
| 1150 | row[2] = after ? symbol.After : symbol.Before; | 1148 | row[2] = after ? symbol.After : symbol.Before; |
| 1151 | row[3] = after ? 1 : 0; | 1149 | row[3] = after ? 1 : 0; |
| 1152 | } | 1150 | } |
| @@ -1271,7 +1269,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1271 | } | 1269 | } |
| 1272 | } | 1270 | } |
| 1273 | 1271 | ||
| 1274 | private void AddWixPackageSymbol(WixPackageSymbol symbol) | 1272 | private void AddWixPackageSymbol(WixPackageSymbol _) |
| 1275 | { | 1273 | { |
| 1276 | // TODO: Remove the following from the compiler and do it here instead. | 1274 | // TODO: Remove the following from the compiler and do it here instead. |
| 1277 | //this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "Manufacturer"), manufacturer, false, false, false, true); | 1275 | //this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "Manufacturer"), manufacturer, false, false, false, true); |
| @@ -1319,11 +1317,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1319 | } | 1317 | } |
| 1320 | } | 1318 | } |
| 1321 | 1319 | ||
| 1322 | private (string, string) AddDirectorySubdirectories(DirectorySymbol symbol) | 1320 | private (string, string) AddDirectorySubdirectories(DirectorySymbol symbol, Dictionary<string, Row> directoryRowsById) |
| 1323 | { | 1321 | { |
| 1324 | var directory = symbol.Name.Trim(PathSeparatorChars); | 1322 | var directory = symbol.Name.Trim(PathSeparatorChars); |
| 1325 | var parentDir = symbol.ParentDirectoryRef ?? (symbol.Id.Id == "TARGETDIR" ? null : "TARGETDIR"); | 1323 | var parentDir = symbol.ParentDirectoryRef ?? (symbol.Id.Id == "TARGETDIR" ? null : "TARGETDIR"); |
| 1326 | var directoryRows = this.Data.TryGetTable("Directory", out var table) ? table.Rows.ToDictionary(row => row.FieldAsString(0)) : new Dictionary<string, Row>(); | ||
| 1327 | 1324 | ||
| 1328 | var start = 0; | 1325 | var start = 0; |
| 1329 | var end = directory.IndexOfAny(PathSeparatorChars); | 1326 | var end = directory.IndexOfAny(PathSeparatorChars); |
| @@ -1337,18 +1334,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1337 | { | 1334 | { |
| 1338 | path = Path.Combine(path, subdirectoryName); | 1335 | path = Path.Combine(path, subdirectoryName); |
| 1339 | 1336 | ||
| 1340 | var id = this.BackendHelper.GenerateIdentifier("d", symbol.ParentDirectoryRef, path); | 1337 | var id = this.BackendHelper.GenerateIdentifier("d", symbol.ParentDirectoryRef, path, /*shortName:*/ null, /*sourceName:*/ null, /*shortSourceName:*/ null); |
| 1341 | var shortnameSubdirectory = this.BackendHelper.IsValidShortFilename(subdirectoryName, false) ? null : this.CreateShortName(subdirectoryName, false, "Directory", symbol.ParentDirectoryRef); | 1338 | var shortnameSubdirectory = this.BackendHelper.IsValidShortFilename(subdirectoryName, false) ? null : this.CreateShortName(subdirectoryName, false, "Directory", symbol.ParentDirectoryRef); |
| 1339 | var defaultDir = CreateMsiFilename(shortnameSubdirectory, subdirectoryName); | ||
| 1342 | 1340 | ||
| 1343 | if (!directoryRows.ContainsKey(id)) | 1341 | this.CreateOrAddDirectoryRow(directoryRowsById, symbol, id, parentDir, defaultDir); |
| 1344 | { | ||
| 1345 | var subdirectoryRow = this.CreateRow(symbol, "Directory"); | ||
| 1346 | subdirectoryRow[0] = id; | ||
| 1347 | subdirectoryRow[1] = parentDir; | ||
| 1348 | subdirectoryRow[2] = CreateMsiFilename(shortnameSubdirectory, subdirectoryName); | ||
| 1349 | |||
| 1350 | directoryRows.Add(id, subdirectoryRow); | ||
| 1351 | } | ||
| 1352 | 1342 | ||
| 1353 | parentDir = id; | 1343 | parentDir = id; |
| 1354 | } | 1344 | } |
| @@ -1362,6 +1352,25 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1362 | return (name, parentDir); | 1352 | return (name, parentDir); |
| 1363 | } | 1353 | } |
| 1364 | 1354 | ||
| 1355 | private Row CreateOrAddDirectoryRow(Dictionary<string, Row> directoryRowsById, DirectorySymbol symbol, string id, string parentDir, string defaultDir) | ||
| 1356 | { | ||
| 1357 | if (!directoryRowsById.TryGetValue(id, out var directoryRow)) | ||
| 1358 | { | ||
| 1359 | directoryRow = this.CreateRow(symbol, "Directory"); | ||
| 1360 | directoryRow[0] = id; | ||
| 1361 | directoryRow[1] = parentDir; | ||
| 1362 | directoryRow[2] = defaultDir; | ||
| 1363 | |||
| 1364 | directoryRowsById.Add(id, directoryRow); | ||
| 1365 | } | ||
| 1366 | else if (directoryRow.FieldAsString(1) != parentDir || directoryRow.FieldAsString(2) != defaultDir) | ||
| 1367 | { | ||
| 1368 | throw new WixException(WindowsInstallerBackendErrors.UnexpectedAnonymousDirectoryCollision(symbol.SourceLineNumbers, symbol.Id.Id, parentDir, defaultDir, directoryRow.SourceLineNumbers, directoryRow.FieldAsString(1), directoryRow.FieldAsString(2))); | ||
| 1369 | } | ||
| 1370 | |||
| 1371 | return directoryRow; | ||
| 1372 | } | ||
| 1373 | |||
| 1365 | private void EnsureRequiredTables() | 1374 | private void EnsureRequiredTables() |
| 1366 | { | 1375 | { |
| 1367 | // check for missing table and add them or display an error as appropriate | 1376 | // check for missing table and add them or display an error as appropriate |
| @@ -1412,7 +1421,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1412 | "Upgrade" == table.Name || | 1421 | "Upgrade" == table.Name || |
| 1413 | "WixMerge" == table.Name) | 1422 | "WixMerge" == table.Name) |
| 1414 | { | 1423 | { |
| 1415 | foreach (Row row in table.Rows) | 1424 | foreach (var row in table.Rows) |
| 1416 | { | 1425 | { |
| 1417 | this.Messaging.Write(ErrorMessages.UnexpectedTableInMergeModule(row.SourceLineNumbers, table.Name)); | 1426 | this.Messaging.Write(ErrorMessages.UnexpectedTableInMergeModule(row.SourceLineNumbers, table.Name)); |
| 1418 | } | 1427 | } |
| @@ -1609,8 +1618,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1609 | longName = longName.ToLowerInvariant(); | 1618 | longName = longName.ToLowerInvariant(); |
| 1610 | 1619 | ||
| 1611 | // collect all the data | 1620 | // collect all the data |
| 1612 | var strings = new List<string>(1 + args.Length); | 1621 | var strings = new List<string>(1 + args.Length) |
| 1613 | strings.Add(longName); | 1622 | { |
| 1623 | longName | ||
| 1624 | }; | ||
| 1614 | strings.AddRange(args); | 1625 | strings.AddRange(args); |
| 1615 | 1626 | ||
| 1616 | // prepare for hashing | 1627 | // prepare for hashing |
| @@ -1625,8 +1636,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 1625 | } | 1636 | } |
| 1626 | 1637 | ||
| 1627 | // generate the short file/directory name without an extension | 1638 | // generate the short file/directory name without an extension |
| 1628 | var shortName = new StringBuilder(Convert.ToBase64String(hash)); | 1639 | var shortName = new StringBuilder(Convert.ToBase64String(hash)) |
| 1629 | shortName.Length = 8; | 1640 | { |
| 1641 | Length = 8 | ||
| 1642 | }; | ||
| 1630 | shortName.Replace('+', '-').Replace('/', '_'); | 1643 | shortName.Replace('+', '-').Replace('/', '_'); |
| 1631 | 1644 | ||
| 1632 | if (keepExtension) | 1645 | if (keepExtension) |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/WindowsInstallerBackendErrors.cs b/src/wix/WixToolset.Core.WindowsInstaller/WindowsInstallerBackendErrors.cs index 756bb5e4..0935d964 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/WindowsInstallerBackendErrors.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/WindowsInstallerBackendErrors.cs | |||
| @@ -39,6 +39,11 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 39 | return Message(null, Ids.InvalidWindowsInstallerWixpdbForValidation, "The validation .wixpdb file: {0} was not from a Windows Installer database build (.msi or .msm). Verify that the output type was actually an MSI Package or Merge Module.", wixpdbPath); | 39 | return Message(null, Ids.InvalidWindowsInstallerWixpdbForValidation, "The validation .wixpdb file: {0} was not from a Windows Installer database build (.msi or .msm). Verify that the output type was actually an MSI Package or Merge Module.", wixpdbPath); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | public static Message UnexpectedAnonymousDirectoryCollision(SourceLineNumber sourceLineNumbers, string id, string parentDir, string defaultDir, SourceLineNumber existingSourceLineNumbers, string existingParentDir, string existingDefaultDir) | ||
| 43 | { | ||
| 44 | return Message(sourceLineNumbers, Ids.UnexpectedAnonymousDirectoryCollision, "This should not happen. The first directory id '{0}' uses parent directory '{1}' with DefaultDir '{2}'. The colliding directory uses parent directory '{3}' with DefaultDir '{4}' from line: {5}", id, parentDir, defaultDir, existingParentDir, existingDefaultDir, existingSourceLineNumbers.ToString()); | ||
| 45 | } | ||
| 46 | |||
| 42 | public static Message UnknownDecompileType(string decompileType, string filePath) | 47 | public static Message UnknownDecompileType(string decompileType, string filePath) |
| 43 | { | 48 | { |
| 44 | return Message(null, Ids.UnknownDecompileType, "Unknown decompile type '{0}' from input: {1}", decompileType, filePath); | 49 | return Message(null, Ids.UnknownDecompileType, "Unknown decompile type '{0}' from input: {1}", decompileType, filePath); |
| @@ -65,6 +70,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 65 | UnknownDecompileType = 7504, | 70 | UnknownDecompileType = 7504, |
| 66 | UnknownValidationTargetFileExtension = 7505, | 71 | UnknownValidationTargetFileExtension = 7505, |
| 67 | InvalidWindowsInstallerWixpdbForValidation = 7506, | 72 | InvalidWindowsInstallerWixpdbForValidation = 7506, |
| 73 | UnexpectedAnonymousDirectoryCollision = 7507, | ||
| 68 | } // last available is 7999. 8000 is BurnBackendErrors. | 74 | } // last available is 7999. 8000 is BurnBackendErrors. |
| 69 | } | 75 | } |
| 70 | } | 76 | } |
diff --git a/src/wix/WixToolset.Core/Compiler.cs b/src/wix/WixToolset.Core/Compiler.cs index 9bcdca4a..3a703fb7 100644 --- a/src/wix/WixToolset.Core/Compiler.cs +++ b/src/wix/WixToolset.Core/Compiler.cs | |||
| @@ -185,12 +185,12 @@ namespace WixToolset.Core | |||
| 185 | { | 185 | { |
| 186 | switch (attrib.Name.LocalName) | 186 | switch (attrib.Name.LocalName) |
| 187 | { | 187 | { |
| 188 | case "RequiredVersion": | 188 | case "RequiredVersion": |
| 189 | requiredVersion = this.Core.GetAttributeVersionValue(sourceLineNumbers, attrib); | 189 | requiredVersion = this.Core.GetAttributeVersionValue(sourceLineNumbers, attrib); |
| 190 | break; | 190 | break; |
| 191 | default: | 191 | default: |
| 192 | this.Core.UnexpectedAttribute(node, attrib); | 192 | this.Core.UnexpectedAttribute(node, attrib); |
| 193 | break; | 193 | break; |
| 194 | } | 194 | } |
| 195 | } | 195 | } |
| 196 | else | 196 | else |
| @@ -210,27 +210,27 @@ namespace WixToolset.Core | |||
| 210 | { | 210 | { |
| 211 | switch (child.Name.LocalName) | 211 | switch (child.Name.LocalName) |
| 212 | { | 212 | { |
| 213 | case "Bundle": | 213 | case "Bundle": |
| 214 | this.ParseBundleElement(child); | 214 | this.ParseBundleElement(child); |
| 215 | break; | 215 | break; |
| 216 | case "Fragment": | 216 | case "Fragment": |
| 217 | this.ParseFragmentElement(child); | 217 | this.ParseFragmentElement(child); |
| 218 | break; | 218 | break; |
| 219 | case "Module": | 219 | case "Module": |
| 220 | this.ParseModuleElement(child); | 220 | this.ParseModuleElement(child); |
| 221 | break; | 221 | break; |
| 222 | case "PatchCreation": | 222 | case "PatchCreation": |
| 223 | this.Core.Write(CompilerWarnings.PatchCreationDeprecated(sourceLineNumbers)); | 223 | this.Core.Write(CompilerWarnings.PatchCreationDeprecated(sourceLineNumbers)); |
| 224 | break; | 224 | break; |
| 225 | case "Package": | 225 | case "Package": |
| 226 | this.ParsePackageElement(child); | 226 | this.ParsePackageElement(child); |
| 227 | break; | 227 | break; |
| 228 | case "Patch": | 228 | case "Patch": |
| 229 | this.ParsePatchElement(child); | 229 | this.ParsePatchElement(child); |
| 230 | break; | 230 | break; |
| 231 | default: | 231 | default: |
| 232 | this.Core.UnexpectedElement(node, child); | 232 | this.Core.UnexpectedElement(node, child); |
| 233 | break; | 233 | break; |
| 234 | } | 234 | } |
| 235 | } | 235 | } |
| 236 | else | 236 | else |
| @@ -472,36 +472,36 @@ namespace WixToolset.Core | |||
| 472 | { | 472 | { |
| 473 | switch (attrib.Name.LocalName) | 473 | switch (attrib.Name.LocalName) |
| 474 | { | 474 | { |
| 475 | case "Id": | 475 | case "Id": |
| 476 | appId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 476 | appId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 477 | break; | 477 | break; |
| 478 | case "ActivateAtStorage": | 478 | case "ActivateAtStorage": |
| 479 | activateAtStorage = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 479 | activateAtStorage = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 480 | break; | 480 | break; |
| 481 | case "Advertise": | 481 | case "Advertise": |
| 482 | appIdAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 482 | appIdAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 483 | break; | 483 | break; |
| 484 | case "Description": | 484 | case "Description": |
| 485 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 485 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 486 | break; | 486 | break; |
| 487 | case "DllSurrogate": | 487 | case "DllSurrogate": |
| 488 | dllSurrogate = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); | 488 | dllSurrogate = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); |
| 489 | break; | 489 | break; |
| 490 | case "LocalService": | 490 | case "LocalService": |
| 491 | localService = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 491 | localService = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 492 | break; | 492 | break; |
| 493 | case "RemoteServerName": | 493 | case "RemoteServerName": |
| 494 | remoteServerName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 494 | remoteServerName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 495 | break; | 495 | break; |
| 496 | case "RunAsInteractiveUser": | 496 | case "RunAsInteractiveUser": |
| 497 | runAsInteractiveUser = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 497 | runAsInteractiveUser = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 498 | break; | 498 | break; |
| 499 | case "ServiceParameters": | 499 | case "ServiceParameters": |
| 500 | serviceParameters = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 500 | serviceParameters = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 501 | break; | 501 | break; |
| 502 | default: | 502 | default: |
| 503 | this.Core.UnexpectedAttribute(node, attrib); | 503 | this.Core.UnexpectedAttribute(node, attrib); |
| 504 | break; | 504 | break; |
| 505 | } | 505 | } |
| 506 | } | 506 | } |
| 507 | else | 507 | else |
| @@ -536,12 +536,12 @@ namespace WixToolset.Core | |||
| 536 | { | 536 | { |
| 537 | switch (child.Name.LocalName) | 537 | switch (child.Name.LocalName) |
| 538 | { | 538 | { |
| 539 | case "Class": | 539 | case "Class": |
| 540 | this.ParseClassElement(child, componentId, advertise, fileServer, typeLibId, typeLibVersion, appId); | 540 | this.ParseClassElement(child, componentId, advertise, fileServer, typeLibId, typeLibVersion, appId); |
| 541 | break; | 541 | break; |
| 542 | default: | 542 | default: |
| 543 | this.Core.UnexpectedElement(node, child); | 543 | this.Core.UnexpectedElement(node, child); |
| 544 | break; | 544 | break; |
| 545 | } | 545 | } |
| 546 | } | 546 | } |
| 547 | else | 547 | else |
| @@ -631,15 +631,15 @@ namespace WixToolset.Core | |||
| 631 | { | 631 | { |
| 632 | switch (attrib.Name.LocalName) | 632 | switch (attrib.Name.LocalName) |
| 633 | { | 633 | { |
| 634 | case "Id": | 634 | case "Id": |
| 635 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 635 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 636 | break; | 636 | break; |
| 637 | case "Value": | 637 | case "Value": |
| 638 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 638 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 639 | break; | 639 | break; |
| 640 | default: | 640 | default: |
| 641 | this.Core.UnexpectedAttribute(node, attrib); | 641 | this.Core.UnexpectedAttribute(node, attrib); |
| 642 | break; | 642 | break; |
| 643 | } | 643 | } |
| 644 | } | 644 | } |
| 645 | else | 645 | else |
| @@ -684,18 +684,18 @@ namespace WixToolset.Core | |||
| 684 | { | 684 | { |
| 685 | switch (attrib.Name.LocalName) | 685 | switch (attrib.Name.LocalName) |
| 686 | { | 686 | { |
| 687 | case "Id": | 687 | case "Id": |
| 688 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 688 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 689 | break; | 689 | break; |
| 690 | case "SourceFile": | 690 | case "SourceFile": |
| 691 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 691 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 692 | break; | 692 | break; |
| 693 | case "SuppressModularization": | 693 | case "SuppressModularization": |
| 694 | suppressModularization = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 694 | suppressModularization = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 695 | break; | 695 | break; |
| 696 | default: | 696 | default: |
| 697 | this.Core.UnexpectedAttribute(node, attrib); | 697 | this.Core.UnexpectedAttribute(node, attrib); |
| 698 | break; | 698 | break; |
| 699 | } | 699 | } |
| 700 | } | 700 | } |
| 701 | else | 701 | else |
| @@ -767,15 +767,15 @@ namespace WixToolset.Core | |||
| 767 | { | 767 | { |
| 768 | switch (attrib.Name.LocalName) | 768 | switch (attrib.Name.LocalName) |
| 769 | { | 769 | { |
| 770 | case "Id": | 770 | case "Id": |
| 771 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 771 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 772 | break; | 772 | break; |
| 773 | case "SourceFile": | 773 | case "SourceFile": |
| 774 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 774 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 775 | break; | 775 | break; |
| 776 | default: | 776 | default: |
| 777 | this.Core.UnexpectedAttribute(node, attrib); | 777 | this.Core.UnexpectedAttribute(node, attrib); |
| 778 | break; | 778 | break; |
| 779 | } | 779 | } |
| 780 | } | 780 | } |
| 781 | else | 781 | else |
| @@ -837,13 +837,13 @@ namespace WixToolset.Core | |||
| 837 | { | 837 | { |
| 838 | switch (attrib.Name.LocalName) | 838 | switch (attrib.Name.LocalName) |
| 839 | { | 839 | { |
| 840 | case "Property": | 840 | case "Property": |
| 841 | property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 841 | property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 842 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, property); | 842 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, property); |
| 843 | break; | 843 | break; |
| 844 | default: | 844 | default: |
| 845 | this.Core.UnexpectedAttribute(node, attrib); | 845 | this.Core.UnexpectedAttribute(node, attrib); |
| 846 | break; | 846 | break; |
| 847 | } | 847 | } |
| 848 | } | 848 | } |
| 849 | else | 849 | else |
| @@ -864,12 +864,12 @@ namespace WixToolset.Core | |||
| 864 | { | 864 | { |
| 865 | switch (child.Name.LocalName) | 865 | switch (child.Name.LocalName) |
| 866 | { | 866 | { |
| 867 | case "Instance": | 867 | case "Instance": |
| 868 | this.ParseInstanceElement(child, property); | 868 | this.ParseInstanceElement(child, property); |
| 869 | break; | 869 | break; |
| 870 | default: | 870 | default: |
| 871 | this.Core.UnexpectedElement(node, child); | 871 | this.Core.UnexpectedElement(node, child); |
| 872 | break; | 872 | break; |
| 873 | } | 873 | } |
| 874 | } | 874 | } |
| 875 | else | 875 | else |
| @@ -898,21 +898,21 @@ namespace WixToolset.Core | |||
| 898 | { | 898 | { |
| 899 | switch (attrib.Name.LocalName) | 899 | switch (attrib.Name.LocalName) |
| 900 | { | 900 | { |
| 901 | case "Id": | 901 | case "Id": |
| 902 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 902 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 903 | break; | 903 | break; |
| 904 | case "ProductCode": | 904 | case "ProductCode": |
| 905 | productCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true); | 905 | productCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true); |
| 906 | break; | 906 | break; |
| 907 | case "ProductName": | 907 | case "ProductName": |
| 908 | productName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 908 | productName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 909 | break; | 909 | break; |
| 910 | case "UpgradeCode": | 910 | case "UpgradeCode": |
| 911 | upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 911 | upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 912 | break; | 912 | break; |
| 913 | default: | 913 | default: |
| 914 | this.Core.UnexpectedAttribute(node, attrib); | 914 | this.Core.UnexpectedAttribute(node, attrib); |
| 915 | break; | 915 | break; |
| 916 | } | 916 | } |
| 917 | } | 917 | } |
| 918 | else | 918 | else |
| @@ -964,22 +964,22 @@ namespace WixToolset.Core | |||
| 964 | { | 964 | { |
| 965 | switch (attrib.Name.LocalName) | 965 | switch (attrib.Name.LocalName) |
| 966 | { | 966 | { |
| 967 | case "Id": | 967 | case "Id": |
| 968 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 968 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 969 | break; | 969 | break; |
| 970 | case "AppData": | 970 | case "AppData": |
| 971 | appData = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 971 | appData = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 972 | break; | 972 | break; |
| 973 | case "Feature": | 973 | case "Feature": |
| 974 | feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 974 | feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 975 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, feature); | 975 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, feature); |
| 976 | break; | 976 | break; |
| 977 | case "Qualifier": | 977 | case "Qualifier": |
| 978 | qualifier = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 978 | qualifier = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 979 | break; | 979 | break; |
| 980 | default: | 980 | default: |
| 981 | this.Core.UnexpectedAttribute(node, attrib); | 981 | this.Core.UnexpectedAttribute(node, attrib); |
| 982 | break; | 982 | break; |
| 983 | } | 983 | } |
| 984 | } | 984 | } |
| 985 | else | 985 | else |
| @@ -1059,71 +1059,71 @@ namespace WixToolset.Core | |||
| 1059 | { | 1059 | { |
| 1060 | switch (attrib.Name.LocalName) | 1060 | switch (attrib.Name.LocalName) |
| 1061 | { | 1061 | { |
| 1062 | case "Id": | 1062 | case "Id": |
| 1063 | classId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1063 | classId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1064 | break; | 1064 | break; |
| 1065 | case "Advertise": | 1065 | case "Advertise": |
| 1066 | classAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1066 | classAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1067 | break; | 1067 | break; |
| 1068 | case "AppId": | 1068 | case "AppId": |
| 1069 | appId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1069 | appId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1070 | break; | 1070 | break; |
| 1071 | case "Argument": | 1071 | case "Argument": |
| 1072 | argument = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1072 | argument = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1073 | break; | 1073 | break; |
| 1074 | case "Context": | 1074 | case "Context": |
| 1075 | contexts = this.Core.GetAttributeValue(sourceLineNumbers, attrib).Split("\r\n\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); | 1075 | contexts = this.Core.GetAttributeValue(sourceLineNumbers, attrib).Split("\r\n\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); |
| 1076 | break; | 1076 | break; |
| 1077 | case "Control": | 1077 | case "Control": |
| 1078 | control = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1078 | control = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1079 | break; | 1079 | break; |
| 1080 | case "Description": | 1080 | case "Description": |
| 1081 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1081 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1082 | break; | 1082 | break; |
| 1083 | case "Handler": | 1083 | case "Handler": |
| 1084 | defaultInprocHandler = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1084 | defaultInprocHandler = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1085 | break; | 1085 | break; |
| 1086 | case "Icon": | 1086 | case "Icon": |
| 1087 | icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 1087 | icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 1088 | break; | 1088 | break; |
| 1089 | case "IconIndex": | 1089 | case "IconIndex": |
| 1090 | iconIndex = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Int16.MinValue + 1, Int16.MaxValue); | 1090 | iconIndex = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Int16.MinValue + 1, Int16.MaxValue); |
| 1091 | break; | 1091 | break; |
| 1092 | case "RelativePath": | 1092 | case "RelativePath": |
| 1093 | relativePath = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1093 | relativePath = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1094 | break; | 1094 | break; |
| 1095 | 1095 | ||
| 1096 | // The following attributes result in rows always added to the Registry table rather than the Class table | 1096 | // The following attributes result in rows always added to the Registry table rather than the Class table |
| 1097 | case "Insertable": | 1097 | case "Insertable": |
| 1098 | insertable = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) ? "Insertable" : "NotInsertable"; | 1098 | insertable = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) ? "Insertable" : "NotInsertable"; |
| 1099 | break; | 1099 | break; |
| 1100 | case "Programmable": | 1100 | case "Programmable": |
| 1101 | programmable = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1101 | programmable = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1102 | break; | 1102 | break; |
| 1103 | case "SafeForInitializing": | 1103 | case "SafeForInitializing": |
| 1104 | safeForInit = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1104 | safeForInit = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1105 | break; | 1105 | break; |
| 1106 | case "SafeForScripting": | 1106 | case "SafeForScripting": |
| 1107 | safeForScripting = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1107 | safeForScripting = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1108 | break; | 1108 | break; |
| 1109 | case "ForeignServer": | 1109 | case "ForeignServer": |
| 1110 | foreignServer = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1110 | foreignServer = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1111 | break; | 1111 | break; |
| 1112 | case "Server": | 1112 | case "Server": |
| 1113 | localFileServer = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1113 | localFileServer = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1114 | break; | 1114 | break; |
| 1115 | case "ShortPath": | 1115 | case "ShortPath": |
| 1116 | shortServerPath = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1116 | shortServerPath = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1117 | break; | 1117 | break; |
| 1118 | case "ThreadingModel": | 1118 | case "ThreadingModel": |
| 1119 | threadingModel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1119 | threadingModel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1120 | break; | 1120 | break; |
| 1121 | case "Version": | 1121 | case "Version": |
| 1122 | version = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1122 | version = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1123 | break; | 1123 | break; |
| 1124 | default: | 1124 | default: |
| 1125 | this.Core.UnexpectedAttribute(node, attrib); | 1125 | this.Core.UnexpectedAttribute(node, attrib); |
| 1126 | break; | 1126 | break; |
| 1127 | } | 1127 | } |
| 1128 | } | 1128 | } |
| 1129 | else | 1129 | else |
| @@ -1199,35 +1199,35 @@ namespace WixToolset.Core | |||
| 1199 | { | 1199 | { |
| 1200 | switch (child.Name.LocalName) | 1200 | switch (child.Name.LocalName) |
| 1201 | { | 1201 | { |
| 1202 | case "FileTypeMask": | 1202 | case "FileTypeMask": |
| 1203 | if (YesNoType.Yes == advertise) | 1203 | if (YesNoType.Yes == advertise) |
| 1204 | { | 1204 | { |
| 1205 | fileTypeMask = String.Concat(fileTypeMask, null == fileTypeMask ? String.Empty : ";", this.ParseFileTypeMaskElement(child)); | 1205 | fileTypeMask = String.Concat(fileTypeMask, null == fileTypeMask ? String.Empty : ";", this.ParseFileTypeMaskElement(child)); |
| 1206 | } | 1206 | } |
| 1207 | else if (YesNoType.No == advertise) | 1207 | else if (YesNoType.No == advertise) |
| 1208 | { | 1208 | { |
| 1209 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 1209 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
| 1210 | this.Core.CreateRegistryStringSymbol(childSourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("FileType\\", classId, "\\", fileTypeMaskIndex.ToString()), String.Empty, this.ParseFileTypeMaskElement(child), componentId); | 1210 | this.Core.CreateRegistryStringSymbol(childSourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("FileType\\", classId, "\\", fileTypeMaskIndex.ToString()), String.Empty, this.ParseFileTypeMaskElement(child), componentId); |
| 1211 | fileTypeMaskIndex++; | 1211 | fileTypeMaskIndex++; |
| 1212 | } | 1212 | } |
| 1213 | break; | 1213 | break; |
| 1214 | case "Interface": | 1214 | case "Interface": |
| 1215 | this.ParseInterfaceElement(child, componentId, class16bit ? classId : null, class32bit ? classId : null, typeLibId, typeLibVersion); | 1215 | this.ParseInterfaceElement(child, componentId, class16bit ? classId : null, class32bit ? classId : null, typeLibId, typeLibVersion); |
| 1216 | break; | 1216 | break; |
| 1217 | case "ProgId": | 1217 | case "ProgId": |
| 1218 | { | ||
| 1219 | var foundExtension = false; | ||
| 1220 | var progId = this.ParseProgIdElement(child, componentId, advertise, classId, description, null, ref foundExtension, firstProgIdForClass); | ||
| 1221 | if (null == defaultProgId) | ||
| 1222 | { | 1218 | { |
| 1223 | defaultProgId = progId; | 1219 | var foundExtension = false; |
| 1220 | var progId = this.ParseProgIdElement(child, componentId, advertise, classId, description, null, ref foundExtension, firstProgIdForClass); | ||
| 1221 | if (null == defaultProgId) | ||
| 1222 | { | ||
| 1223 | defaultProgId = progId; | ||
| 1224 | } | ||
| 1225 | firstProgIdForClass = YesNoType.No; | ||
| 1224 | } | 1226 | } |
| 1225 | firstProgIdForClass = YesNoType.No; | ||
| 1226 | } | ||
| 1227 | break; | ||
| 1228 | default: | ||
| 1229 | this.Core.UnexpectedElement(node, child); | ||
| 1230 | break; | 1227 | break; |
| 1228 | default: | ||
| 1229 | this.Core.UnexpectedElement(node, child); | ||
| 1230 | break; | ||
| 1231 | } | 1231 | } |
| 1232 | } | 1232 | } |
| 1233 | else | 1233 | else |
| @@ -1394,19 +1394,19 @@ namespace WixToolset.Core | |||
| 1394 | { | 1394 | { |
| 1395 | switch (defaultInprocHandler) // ClassId Default Inproc Handler | 1395 | switch (defaultInprocHandler) // ClassId Default Inproc Handler |
| 1396 | { | 1396 | { |
| 1397 | case "1": | 1397 | case "1": |
| 1398 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler"), String.Empty, "ole2.dll", componentId); | 1398 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler"), String.Empty, "ole2.dll", componentId); |
| 1399 | break; | 1399 | break; |
| 1400 | case "2": | 1400 | case "2": |
| 1401 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, "ole32.dll", componentId); | 1401 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, "ole32.dll", componentId); |
| 1402 | break; | 1402 | break; |
| 1403 | case "3": | 1403 | case "3": |
| 1404 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler"), String.Empty, "ole2.dll", componentId); | 1404 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler"), String.Empty, "ole2.dll", componentId); |
| 1405 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, "ole32.dll", componentId); | 1405 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, "ole32.dll", componentId); |
| 1406 | break; | 1406 | break; |
| 1407 | default: | 1407 | default: |
| 1408 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, defaultInprocHandler, componentId); | 1408 | this.Core.CreateRegistryStringSymbol(sourceLineNumbers, RegistryRootType.ClassesRoot, String.Concat("CLSID\\", classId, "\\InprocHandler32"), String.Empty, defaultInprocHandler, componentId); |
| 1409 | break; | 1409 | break; |
| 1410 | } | 1410 | } |
| 1411 | } | 1411 | } |
| 1412 | 1412 | ||
| @@ -1490,30 +1490,30 @@ namespace WixToolset.Core | |||
| 1490 | { | 1490 | { |
| 1491 | switch (attrib.Name.LocalName) | 1491 | switch (attrib.Name.LocalName) |
| 1492 | { | 1492 | { |
| 1493 | case "Id": | 1493 | case "Id": |
| 1494 | interfaceId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1494 | interfaceId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1495 | break; | 1495 | break; |
| 1496 | case "BaseInterface": | 1496 | case "BaseInterface": |
| 1497 | baseInterface = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1497 | baseInterface = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1498 | break; | 1498 | break; |
| 1499 | case "Name": | 1499 | case "Name": |
| 1500 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1500 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1501 | break; | 1501 | break; |
| 1502 | case "NumMethods": | 1502 | case "NumMethods": |
| 1503 | numMethods = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); | 1503 | numMethods = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); |
| 1504 | break; | 1504 | break; |
| 1505 | case "ProxyStubClassId": | 1505 | case "ProxyStubClassId": |
| 1506 | proxyId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib); | 1506 | proxyId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib); |
| 1507 | break; | 1507 | break; |
| 1508 | case "ProxyStubClassId32": | 1508 | case "ProxyStubClassId32": |
| 1509 | proxyId32 = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1509 | proxyId32 = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1510 | break; | 1510 | break; |
| 1511 | case "Versioned": | 1511 | case "Versioned": |
| 1512 | versioned = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1512 | versioned = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1513 | break; | 1513 | break; |
| 1514 | default: | 1514 | default: |
| 1515 | this.Core.UnexpectedAttribute(node, attrib); | 1515 | this.Core.UnexpectedAttribute(node, attrib); |
| 1516 | break; | 1516 | break; |
| 1517 | } | 1517 | } |
| 1518 | } | 1518 | } |
| 1519 | else | 1519 | else |
| @@ -1584,18 +1584,18 @@ namespace WixToolset.Core | |||
| 1584 | { | 1584 | { |
| 1585 | switch (attrib.Name.LocalName) | 1585 | switch (attrib.Name.LocalName) |
| 1586 | { | 1586 | { |
| 1587 | case "Mask": | 1587 | case "Mask": |
| 1588 | mask = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1588 | mask = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1589 | break; | 1589 | break; |
| 1590 | case "Offset": | 1590 | case "Offset": |
| 1591 | offset = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); | 1591 | offset = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); |
| 1592 | break; | 1592 | break; |
| 1593 | case "Value": | 1593 | case "Value": |
| 1594 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1594 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1595 | break; | 1595 | break; |
| 1596 | default: | 1596 | default: |
| 1597 | this.Core.UnexpectedAttribute(node, attrib); | 1597 | this.Core.UnexpectedAttribute(node, attrib); |
| 1598 | break; | 1598 | break; |
| 1599 | } | 1599 | } |
| 1600 | } | 1600 | } |
| 1601 | else | 1601 | else |
| @@ -1658,30 +1658,30 @@ namespace WixToolset.Core | |||
| 1658 | { | 1658 | { |
| 1659 | switch (attrib.Name.LocalName) | 1659 | switch (attrib.Name.LocalName) |
| 1660 | { | 1660 | { |
| 1661 | case "ExcludeLanguages": | 1661 | case "ExcludeLanguages": |
| 1662 | excludeLanguages = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1662 | excludeLanguages = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1663 | break; | 1663 | break; |
| 1664 | case "IncludeMaximum": | 1664 | case "IncludeMaximum": |
| 1665 | maxInclusive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1665 | maxInclusive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1666 | break; | 1666 | break; |
| 1667 | case "IncludeMinimum": | 1667 | case "IncludeMinimum": |
| 1668 | minInclusive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1668 | minInclusive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 1669 | break; | 1669 | break; |
| 1670 | case "Language": | 1670 | case "Language": |
| 1671 | language = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1671 | language = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1672 | break; | 1672 | break; |
| 1673 | case "Minimum": | 1673 | case "Minimum": |
| 1674 | minimum = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1674 | minimum = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1675 | break; | 1675 | break; |
| 1676 | case "Maximum": | 1676 | case "Maximum": |
| 1677 | maximum = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1677 | maximum = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1678 | break; | 1678 | break; |
| 1679 | case "UpgradeCode": | 1679 | case "UpgradeCode": |
| 1680 | upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 1680 | upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 1681 | break; | 1681 | break; |
| 1682 | default: | 1682 | default: |
| 1683 | this.Core.UnexpectedAttribute(node, attrib); | 1683 | this.Core.UnexpectedAttribute(node, attrib); |
| 1684 | break; | 1684 | break; |
| 1685 | } | 1685 | } |
| 1686 | } | 1686 | } |
| 1687 | else | 1687 | else |
| @@ -1735,59 +1735,59 @@ namespace WixToolset.Core | |||
| 1735 | { | 1735 | { |
| 1736 | switch (attrib.Name.LocalName) | 1736 | switch (attrib.Name.LocalName) |
| 1737 | { | 1737 | { |
| 1738 | case "Id": | 1738 | case "Id": |
| 1739 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 1739 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 1740 | break; | ||
| 1741 | case "Bitness": | ||
| 1742 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 1743 | switch (bitnessValue) | ||
| 1744 | { | ||
| 1745 | case "always32": | ||
| 1746 | search64bit = false; | ||
| 1747 | break; | ||
| 1748 | case "always64": | ||
| 1749 | search64bit = true; | ||
| 1750 | break; | ||
| 1751 | case "default": | ||
| 1752 | case "": | ||
| 1753 | break; | 1740 | break; |
| 1754 | default: | 1741 | case "Bitness": |
| 1755 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | 1742 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1743 | switch (bitnessValue) | ||
| 1744 | { | ||
| 1745 | case "always32": | ||
| 1746 | search64bit = false; | ||
| 1747 | break; | ||
| 1748 | case "always64": | ||
| 1749 | search64bit = true; | ||
| 1750 | break; | ||
| 1751 | case "default": | ||
| 1752 | case "": | ||
| 1753 | break; | ||
| 1754 | default: | ||
| 1755 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | ||
| 1756 | break; | ||
| 1757 | } | ||
| 1756 | break; | 1758 | break; |
| 1757 | } | 1759 | case "Key": |
| 1758 | break; | 1760 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1759 | case "Key": | ||
| 1760 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 1761 | break; | ||
| 1762 | case "Name": | ||
| 1763 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 1764 | break; | ||
| 1765 | case "Root": | ||
| 1766 | root = this.Core.GetAttributeRegistryRootValue(sourceLineNumbers, attrib, false); | ||
| 1767 | break; | ||
| 1768 | case "Type": | ||
| 1769 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 1770 | switch (typeValue) | ||
| 1771 | { | ||
| 1772 | case "directory": | ||
| 1773 | type = RegLocatorType.Directory; | ||
| 1774 | break; | 1761 | break; |
| 1775 | case "file": | 1762 | case "Name": |
| 1776 | type = RegLocatorType.FileName; | 1763 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 1777 | break; | 1764 | break; |
| 1778 | case "raw": | 1765 | case "Root": |
| 1779 | type = RegLocatorType.Raw; | 1766 | root = this.Core.GetAttributeRegistryRootValue(sourceLineNumbers, attrib, false); |
| 1780 | break; | 1767 | break; |
| 1781 | case "": | 1768 | case "Type": |
| 1769 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 1770 | switch (typeValue) | ||
| 1771 | { | ||
| 1772 | case "directory": | ||
| 1773 | type = RegLocatorType.Directory; | ||
| 1774 | break; | ||
| 1775 | case "file": | ||
| 1776 | type = RegLocatorType.FileName; | ||
| 1777 | break; | ||
| 1778 | case "raw": | ||
| 1779 | type = RegLocatorType.Raw; | ||
| 1780 | break; | ||
| 1781 | case "": | ||
| 1782 | break; | ||
| 1783 | default: | ||
| 1784 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "raw")); | ||
| 1785 | break; | ||
| 1786 | } | ||
| 1782 | break; | 1787 | break; |
| 1783 | default: | 1788 | default: |
| 1784 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "raw")); | 1789 | this.Core.UnexpectedAttribute(node, attrib); |
| 1785 | break; | 1790 | break; |
| 1786 | } | ||
| 1787 | break; | ||
| 1788 | default: | ||
| 1789 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 1790 | break; | ||
| 1791 | } | 1791 | } |
| 1792 | } | 1792 | } |
| 1793 | else | 1793 | else |
| @@ -1824,46 +1824,46 @@ namespace WixToolset.Core | |||
| 1824 | { | 1824 | { |
| 1825 | switch (child.Name.LocalName) | 1825 | switch (child.Name.LocalName) |
| 1826 | { | 1826 | { |
| 1827 | case "DirectorySearch": | 1827 | case "DirectorySearch": |
| 1828 | if (oneChild) | 1828 | if (oneChild) |
| 1829 | { | 1829 | { |
| 1830 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 1830 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 1831 | } | 1831 | } |
| 1832 | oneChild = true; | 1832 | oneChild = true; |
| 1833 | 1833 | ||
| 1834 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column | 1834 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column |
| 1835 | signature = this.ParseDirectorySearchElement(child, id.Id); | 1835 | signature = this.ParseDirectorySearchElement(child, id.Id); |
| 1836 | break; | 1836 | break; |
| 1837 | case "DirectorySearchRef": | 1837 | case "DirectorySearchRef": |
| 1838 | if (oneChild) | 1838 | if (oneChild) |
| 1839 | { | 1839 | { |
| 1840 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 1840 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 1841 | } | 1841 | } |
| 1842 | oneChild = true; | 1842 | oneChild = true; |
| 1843 | signature = this.ParseDirectorySearchRefElement(child, id.Id); | 1843 | signature = this.ParseDirectorySearchRefElement(child, id.Id); |
| 1844 | break; | 1844 | break; |
| 1845 | case "FileSearch": | 1845 | case "FileSearch": |
| 1846 | if (oneChild) | 1846 | if (oneChild) |
| 1847 | { | 1847 | { |
| 1848 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 1848 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 1849 | } | 1849 | } |
| 1850 | oneChild = true; | 1850 | oneChild = true; |
| 1851 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); | 1851 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); |
| 1852 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures | 1852 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures |
| 1853 | break; | 1853 | break; |
| 1854 | case "FileSearchRef": | 1854 | case "FileSearchRef": |
| 1855 | if (oneChild) | 1855 | if (oneChild) |
| 1856 | { | 1856 | { |
| 1857 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 1857 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 1858 | } | 1858 | } |
| 1859 | oneChild = true; | 1859 | oneChild = true; |
| 1860 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures | 1860 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures |
| 1861 | id = new Identifier(AccessModifier.Section, newId); | 1861 | id = new Identifier(AccessModifier.Section, newId); |
| 1862 | signature = null; | 1862 | signature = null; |
| 1863 | break; | 1863 | break; |
| 1864 | default: | 1864 | default: |
| 1865 | this.Core.UnexpectedElement(node, child); | 1865 | this.Core.UnexpectedElement(node, child); |
| 1866 | break; | 1866 | break; |
| 1867 | } | 1867 | } |
| 1868 | } | 1868 | } |
| 1869 | else | 1869 | else |
| @@ -1903,13 +1903,13 @@ namespace WixToolset.Core | |||
| 1903 | { | 1903 | { |
| 1904 | switch (attrib.Name.LocalName) | 1904 | switch (attrib.Name.LocalName) |
| 1905 | { | 1905 | { |
| 1906 | case "Id": | 1906 | case "Id": |
| 1907 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 1907 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 1908 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.RegLocator, id); | 1908 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.RegLocator, id); |
| 1909 | break; | 1909 | break; |
| 1910 | default: | 1910 | default: |
| 1911 | this.Core.UnexpectedAttribute(node, attrib); | 1911 | this.Core.UnexpectedAttribute(node, attrib); |
| 1912 | break; | 1912 | break; |
| 1913 | } | 1913 | } |
| 1914 | } | 1914 | } |
| 1915 | else | 1915 | else |
| @@ -1944,33 +1944,33 @@ namespace WixToolset.Core | |||
| 1944 | { | 1944 | { |
| 1945 | switch (child.Name.LocalName) | 1945 | switch (child.Name.LocalName) |
| 1946 | { | 1946 | { |
| 1947 | case "ComplianceDrive": | 1947 | case "ComplianceDrive": |
| 1948 | signature = this.ParseComplianceDriveElement(child); | 1948 | signature = this.ParseComplianceDriveElement(child); |
| 1949 | break; | 1949 | break; |
| 1950 | case "ComponentSearch": | 1950 | case "ComponentSearch": |
| 1951 | signature = this.ParseComponentSearchElement(child); | 1951 | signature = this.ParseComponentSearchElement(child); |
| 1952 | break; | 1952 | break; |
| 1953 | case "DirectorySearch": | 1953 | case "DirectorySearch": |
| 1954 | signature = this.ParseDirectorySearchElement(child, null); | 1954 | signature = this.ParseDirectorySearchElement(child, null); |
| 1955 | break; | 1955 | break; |
| 1956 | case "DirectorySearchRef": | 1956 | case "DirectorySearchRef": |
| 1957 | signature = this.ParseDirectorySearchRefElement(child, null); | 1957 | signature = this.ParseDirectorySearchRefElement(child, null); |
| 1958 | break; | 1958 | break; |
| 1959 | case "IniFileSearch": | 1959 | case "IniFileSearch": |
| 1960 | signature = this.ParseIniFileSearchElement(child); | 1960 | signature = this.ParseIniFileSearchElement(child); |
| 1961 | break; | 1961 | break; |
| 1962 | case "ProductSearch": | 1962 | case "ProductSearch": |
| 1963 | // handled in ParsePropertyElement | 1963 | // handled in ParsePropertyElement |
| 1964 | break; | 1964 | break; |
| 1965 | case "RegistrySearch": | 1965 | case "RegistrySearch": |
| 1966 | signature = this.ParseRegistrySearchElement(child); | 1966 | signature = this.ParseRegistrySearchElement(child); |
| 1967 | break; | 1967 | break; |
| 1968 | case "RegistrySearchRef": | 1968 | case "RegistrySearchRef": |
| 1969 | signature = this.ParseRegistrySearchRefElement(child); | 1969 | signature = this.ParseRegistrySearchRefElement(child); |
| 1970 | break; | 1970 | break; |
| 1971 | default: | 1971 | default: |
| 1972 | this.Core.UnexpectedElement(node, child); | 1972 | this.Core.UnexpectedElement(node, child); |
| 1973 | break; | 1973 | break; |
| 1974 | } | 1974 | } |
| 1975 | } | 1975 | } |
| 1976 | else | 1976 | else |
| @@ -2006,25 +2006,25 @@ namespace WixToolset.Core | |||
| 2006 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | 2006 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); |
| 2007 | switch (child.Name.LocalName) | 2007 | switch (child.Name.LocalName) |
| 2008 | { | 2008 | { |
| 2009 | case "DirectorySearch": | 2009 | case "DirectorySearch": |
| 2010 | if (oneChild) | 2010 | if (oneChild) |
| 2011 | { | 2011 | { |
| 2012 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 2012 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 2013 | } | 2013 | } |
| 2014 | oneChild = true; | 2014 | oneChild = true; |
| 2015 | signature = this.ParseDirectorySearchElement(child, "CCP_DRIVE"); | 2015 | signature = this.ParseDirectorySearchElement(child, "CCP_DRIVE"); |
| 2016 | break; | 2016 | break; |
| 2017 | case "DirectorySearchRef": | 2017 | case "DirectorySearchRef": |
| 2018 | if (oneChild) | 2018 | if (oneChild) |
| 2019 | { | 2019 | { |
| 2020 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 2020 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 2021 | } | 2021 | } |
| 2022 | oneChild = true; | 2022 | oneChild = true; |
| 2023 | signature = this.ParseDirectorySearchRefElement(child, "CCP_DRIVE"); | 2023 | signature = this.ParseDirectorySearchRefElement(child, "CCP_DRIVE"); |
| 2024 | break; | 2024 | break; |
| 2025 | default: | 2025 | default: |
| 2026 | this.Core.UnexpectedElement(node, child); | 2026 | this.Core.UnexpectedElement(node, child); |
| 2027 | break; | 2027 | break; |
| 2028 | } | 2028 | } |
| 2029 | } | 2029 | } |
| 2030 | else | 2030 | else |
| @@ -2055,9 +2055,9 @@ namespace WixToolset.Core | |||
| 2055 | { | 2055 | { |
| 2056 | switch (attrib.Name.LocalName) | 2056 | switch (attrib.Name.LocalName) |
| 2057 | { | 2057 | { |
| 2058 | default: | 2058 | default: |
| 2059 | this.Core.UnexpectedAttribute(node, attrib); | 2059 | this.Core.UnexpectedAttribute(node, attrib); |
| 2060 | break; | 2060 | break; |
| 2061 | } | 2061 | } |
| 2062 | } | 2062 | } |
| 2063 | else | 2063 | else |
| @@ -2143,103 +2143,103 @@ namespace WixToolset.Core | |||
| 2143 | { | 2143 | { |
| 2144 | switch (attrib.Name.LocalName) | 2144 | switch (attrib.Name.LocalName) |
| 2145 | { | 2145 | { |
| 2146 | case "Id": | 2146 | case "Id": |
| 2147 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 2147 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 2148 | break; | ||
| 2149 | case "Bitness": | ||
| 2150 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2151 | switch (bitnessValue) | ||
| 2152 | { | ||
| 2153 | case "always32": | ||
| 2154 | win64 = false; | ||
| 2155 | break; | 2148 | break; |
| 2156 | case "always64": | 2149 | case "Bitness": |
| 2157 | win64 = true; | 2150 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 2151 | switch (bitnessValue) | ||
| 2152 | { | ||
| 2153 | case "always32": | ||
| 2154 | win64 = false; | ||
| 2155 | break; | ||
| 2156 | case "always64": | ||
| 2157 | win64 = true; | ||
| 2158 | break; | ||
| 2159 | case "default": | ||
| 2160 | case "": | ||
| 2161 | break; | ||
| 2162 | default: | ||
| 2163 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | ||
| 2164 | break; | ||
| 2165 | } | ||
| 2158 | break; | 2166 | break; |
| 2159 | case "default": | 2167 | case "ComPlusFlags": |
| 2160 | case "": | 2168 | comPlusBits = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); |
| 2161 | break; | 2169 | break; |
| 2162 | default: | 2170 | case "DisableRegistryReflection": |
| 2163 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | 2171 | disableRegistryReflection = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 2164 | break; | 2172 | break; |
| 2165 | } | 2173 | case "Condition": |
| 2166 | break; | 2174 | condition = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 2167 | case "ComPlusFlags": | ||
| 2168 | comPlusBits = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 2169 | break; | ||
| 2170 | case "DisableRegistryReflection": | ||
| 2171 | disableRegistryReflection = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2172 | break; | ||
| 2173 | case "Condition": | ||
| 2174 | condition = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2175 | break; | ||
| 2176 | case "Directory": | ||
| 2177 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 2178 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); | ||
| 2179 | break; | ||
| 2180 | case "Subdirectory": | ||
| 2181 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | ||
| 2182 | break; | ||
| 2183 | case "DiskId": | ||
| 2184 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | ||
| 2185 | break; | ||
| 2186 | case "Feature": | ||
| 2187 | feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 2188 | break; | ||
| 2189 | case "Guid": | ||
| 2190 | guid = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true, true); | ||
| 2191 | break; | ||
| 2192 | case "KeyPath": | ||
| 2193 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 2194 | { | ||
| 2195 | keyFound = true; | ||
| 2196 | keyPath = null; | ||
| 2197 | } | ||
| 2198 | break; | ||
| 2199 | case "Location": | ||
| 2200 | var locationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2201 | switch (locationValue) | ||
| 2202 | { | ||
| 2203 | case "either": | ||
| 2204 | location = ComponentLocation.Either; | ||
| 2205 | break; | 2175 | break; |
| 2206 | case "local": // this is the default | 2176 | case "Directory": |
| 2207 | location = ComponentLocation.LocalOnly; | 2177 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 2178 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); | ||
| 2208 | break; | 2179 | break; |
| 2209 | case "source": | 2180 | case "Subdirectory": |
| 2210 | location = ComponentLocation.SourceOnly; | 2181 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 2211 | break; | 2182 | break; |
| 2212 | case "": | 2183 | case "DiskId": |
| 2184 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | ||
| 2185 | break; | ||
| 2186 | case "Feature": | ||
| 2187 | feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 2188 | break; | ||
| 2189 | case "Guid": | ||
| 2190 | guid = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true, true); | ||
| 2191 | break; | ||
| 2192 | case "KeyPath": | ||
| 2193 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 2194 | { | ||
| 2195 | keyFound = true; | ||
| 2196 | keyPath = null; | ||
| 2197 | } | ||
| 2198 | break; | ||
| 2199 | case "Location": | ||
| 2200 | var locationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2201 | switch (locationValue) | ||
| 2202 | { | ||
| 2203 | case "either": | ||
| 2204 | location = ComponentLocation.Either; | ||
| 2205 | break; | ||
| 2206 | case "local": // this is the default | ||
| 2207 | location = ComponentLocation.LocalOnly; | ||
| 2208 | break; | ||
| 2209 | case "source": | ||
| 2210 | location = ComponentLocation.SourceOnly; | ||
| 2211 | break; | ||
| 2212 | case "": | ||
| 2213 | break; | ||
| 2214 | default: | ||
| 2215 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, locationValue, "either", "local", "source")); | ||
| 2216 | break; | ||
| 2217 | } | ||
| 2218 | break; | ||
| 2219 | case "MultiInstance": | ||
| 2220 | multiInstance = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2221 | break; | ||
| 2222 | case "NeverOverwrite": | ||
| 2223 | neverOverwrite = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2224 | break; | ||
| 2225 | case "Permanent": | ||
| 2226 | permanent = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2227 | break; | ||
| 2228 | case "Shared": | ||
| 2229 | shared = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2230 | break; | ||
| 2231 | case "SharedDllRefCount": | ||
| 2232 | sharedDllRefCount = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2233 | break; | ||
| 2234 | case "Transitive": | ||
| 2235 | transitive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2236 | break; | ||
| 2237 | case "UninstallWhenSuperseded": | ||
| 2238 | uninstallWhenSuperseded = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2213 | break; | 2239 | break; |
| 2214 | default: | 2240 | default: |
| 2215 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, locationValue, "either", "local", "source")); | 2241 | this.Core.UnexpectedAttribute(node, attrib); |
| 2216 | break; | 2242 | break; |
| 2217 | } | ||
| 2218 | break; | ||
| 2219 | case "MultiInstance": | ||
| 2220 | multiInstance = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2221 | break; | ||
| 2222 | case "NeverOverwrite": | ||
| 2223 | neverOverwrite = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2224 | break; | ||
| 2225 | case "Permanent": | ||
| 2226 | permanent = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2227 | break; | ||
| 2228 | case "Shared": | ||
| 2229 | shared = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2230 | break; | ||
| 2231 | case "SharedDllRefCount": | ||
| 2232 | sharedDllRefCount = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2233 | break; | ||
| 2234 | case "Transitive": | ||
| 2235 | transitive = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2236 | break; | ||
| 2237 | case "UninstallWhenSuperseded": | ||
| 2238 | uninstallWhenSuperseded = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 2239 | break; | ||
| 2240 | default: | ||
| 2241 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 2242 | break; | ||
| 2243 | } | 2243 | } |
| 2244 | } | 2244 | } |
| 2245 | else | 2245 | else |
| @@ -2305,113 +2305,113 @@ namespace WixToolset.Core | |||
| 2305 | { | 2305 | { |
| 2306 | switch (child.Name.LocalName) | 2306 | switch (child.Name.LocalName) |
| 2307 | { | 2307 | { |
| 2308 | case "AppId": | 2308 | case "AppId": |
| 2309 | this.ParseAppIdElement(child, id.Id, YesNoType.NotSet, null, null, null); | 2309 | this.ParseAppIdElement(child, id.Id, YesNoType.NotSet, null, null, null); |
| 2310 | break; | 2310 | break; |
| 2311 | case "Category": | 2311 | case "Category": |
| 2312 | this.ParseCategoryElement(child, id.Id); | 2312 | this.ParseCategoryElement(child, id.Id); |
| 2313 | break; | 2313 | break; |
| 2314 | case "Class": | 2314 | case "Class": |
| 2315 | this.ParseClassElement(child, id.Id, YesNoType.NotSet, null, null, null, null); | 2315 | this.ParseClassElement(child, id.Id, YesNoType.NotSet, null, null, null, null); |
| 2316 | break; | 2316 | break; |
| 2317 | case "CopyFile": | 2317 | case "CopyFile": |
| 2318 | this.ParseCopyFileElement(child, id.Id, null); | 2318 | this.ParseCopyFileElement(child, id.Id, null); |
| 2319 | break; | 2319 | break; |
| 2320 | case "CreateFolder": | 2320 | case "CreateFolder": |
| 2321 | var createdFolder = this.ParseCreateFolderElement(child, id.Id, directoryId, win64); | 2321 | var createdFolder = this.ParseCreateFolderElement(child, id.Id, directoryId, win64); |
| 2322 | break; | 2322 | break; |
| 2323 | case "Environment": | 2323 | case "Environment": |
| 2324 | this.ParseEnvironmentElement(child, id.Id); | 2324 | this.ParseEnvironmentElement(child, id.Id); |
| 2325 | break; | 2325 | break; |
| 2326 | case "Extension": | 2326 | case "Extension": |
| 2327 | this.ParseExtensionElement(child, id.Id, YesNoType.NotSet, null); | 2327 | this.ParseExtensionElement(child, id.Id, YesNoType.NotSet, null); |
| 2328 | break; | 2328 | break; |
| 2329 | case "File": | 2329 | case "File": |
| 2330 | keyPathSet = this.ParseFileElement(child, id.Id, directoryId, diskId, srcPath, out keyPossible, win64, guid); | 2330 | keyPathSet = this.ParseFileElement(child, id.Id, directoryId, diskId, srcPath, out keyPossible, win64, guid); |
| 2331 | keyBit = ComponentKeyPathType.File; | 2331 | keyBit = ComponentKeyPathType.File; |
| 2332 | files++; | 2332 | files++; |
| 2333 | break; | 2333 | break; |
| 2334 | case "IniFile": | 2334 | case "IniFile": |
| 2335 | this.ParseIniFileElement(child, id.Id); | 2335 | this.ParseIniFileElement(child, id.Id); |
| 2336 | break; | 2336 | break; |
| 2337 | case "Interface": | 2337 | case "Interface": |
| 2338 | this.ParseInterfaceElement(child, id.Id, null, null, null, null); | 2338 | this.ParseInterfaceElement(child, id.Id, null, null, null, null); |
| 2339 | break; | 2339 | break; |
| 2340 | case "IsolateComponent": | 2340 | case "IsolateComponent": |
| 2341 | this.ParseIsolateComponentElement(child, id.Id); | 2341 | this.ParseIsolateComponentElement(child, id.Id); |
| 2342 | break; | 2342 | break; |
| 2343 | case "ODBCDataSource": | 2343 | case "ODBCDataSource": |
| 2344 | keyPathSet = this.ParseODBCDataSource(child, id.Id, null, out keyPossible); | 2344 | keyPathSet = this.ParseODBCDataSource(child, id.Id, null, out keyPossible); |
| 2345 | keyBit = ComponentKeyPathType.OdbcDataSource; | 2345 | keyBit = ComponentKeyPathType.OdbcDataSource; |
| 2346 | encounteredODBCDataSource = true; | 2346 | encounteredODBCDataSource = true; |
| 2347 | break; | 2347 | break; |
| 2348 | case "ODBCDriver": | 2348 | case "ODBCDriver": |
| 2349 | this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCDriver); | 2349 | this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCDriver); |
| 2350 | break; | 2350 | break; |
| 2351 | case "ODBCTranslator": | 2351 | case "ODBCTranslator": |
| 2352 | this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCTranslator); | 2352 | this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCTranslator); |
| 2353 | break; | 2353 | break; |
| 2354 | case "ProgId": | 2354 | case "ProgId": |
| 2355 | var foundExtension = false; | 2355 | var foundExtension = false; |
| 2356 | this.ParseProgIdElement(child, id.Id, YesNoType.NotSet, null, null, null, ref foundExtension, YesNoType.NotSet); | 2356 | this.ParseProgIdElement(child, id.Id, YesNoType.NotSet, null, null, null, ref foundExtension, YesNoType.NotSet); |
| 2357 | break; | 2357 | break; |
| 2358 | case "Provides": | 2358 | case "Provides": |
| 2359 | if (win64) | 2359 | if (win64) |
| 2360 | { | 2360 | { |
| 2361 | this.Messaging.Write(CompilerWarnings.Win64Component(sourceLineNumbers, id.Id)); | 2361 | this.Messaging.Write(CompilerWarnings.Win64Component(sourceLineNumbers, id.Id)); |
| 2362 | } | 2362 | } |
| 2363 | 2363 | ||
| 2364 | keyPathSet = this.ParseProvidesElement(child, null, id.Id, out keyPossible); | 2364 | keyPathSet = this.ParseProvidesElement(child, null, id.Id, out keyPossible); |
| 2365 | keyBit = ComponentKeyPathType.Registry; | 2365 | keyBit = ComponentKeyPathType.Registry; |
| 2366 | break; | 2366 | break; |
| 2367 | 2367 | ||
| 2368 | case "RegistryKey": | 2368 | case "RegistryKey": |
| 2369 | keyPathSet = this.ParseRegistryKeyElement(child, id.Id, null, null, win64, out keyPossible); | 2369 | keyPathSet = this.ParseRegistryKeyElement(child, id.Id, null, null, win64, out keyPossible); |
| 2370 | keyBit = ComponentKeyPathType.Registry; | 2370 | keyBit = ComponentKeyPathType.Registry; |
| 2371 | break; | 2371 | break; |
| 2372 | case "RegistryValue": | 2372 | case "RegistryValue": |
| 2373 | keyPathSet = this.ParseRegistryValueElement(child, id.Id, null, null, win64, out keyPossible); | 2373 | keyPathSet = this.ParseRegistryValueElement(child, id.Id, null, null, win64, out keyPossible); |
| 2374 | keyBit = ComponentKeyPathType.Registry; | 2374 | keyBit = ComponentKeyPathType.Registry; |
| 2375 | break; | 2375 | break; |
| 2376 | case "RemoveFile": | 2376 | case "RemoveFile": |
| 2377 | this.ParseRemoveFileElement(child, id.Id, directoryId); | 2377 | this.ParseRemoveFileElement(child, id.Id, directoryId); |
| 2378 | break; | 2378 | break; |
| 2379 | case "RemoveFolder": | 2379 | case "RemoveFolder": |
| 2380 | this.ParseRemoveFolderElement(child, id.Id, directoryId); | 2380 | this.ParseRemoveFolderElement(child, id.Id, directoryId); |
| 2381 | break; | 2381 | break; |
| 2382 | case "RemoveRegistryKey": | 2382 | case "RemoveRegistryKey": |
| 2383 | this.ParseRemoveRegistryKeyElement(child, id.Id); | 2383 | this.ParseRemoveRegistryKeyElement(child, id.Id); |
| 2384 | break; | 2384 | break; |
| 2385 | case "RemoveRegistryValue": | 2385 | case "RemoveRegistryValue": |
| 2386 | this.ParseRemoveRegistryValueElement(child, id.Id); | 2386 | this.ParseRemoveRegistryValueElement(child, id.Id); |
| 2387 | break; | 2387 | break; |
| 2388 | case "ReserveCost": | 2388 | case "ReserveCost": |
| 2389 | this.ParseReserveCostElement(child, id.Id, directoryId); | 2389 | this.ParseReserveCostElement(child, id.Id, directoryId); |
| 2390 | break; | 2390 | break; |
| 2391 | case "ServiceConfig": | 2391 | case "ServiceConfig": |
| 2392 | this.ParseServiceConfigElement(child, id.Id, null); | 2392 | this.ParseServiceConfigElement(child, id.Id, null); |
| 2393 | break; | 2393 | break; |
| 2394 | case "ServiceConfigFailureActions": | 2394 | case "ServiceConfigFailureActions": |
| 2395 | this.ParseServiceConfigFailureActionsElement(child, id.Id, null); | 2395 | this.ParseServiceConfigFailureActionsElement(child, id.Id, null); |
| 2396 | break; | 2396 | break; |
| 2397 | case "ServiceControl": | 2397 | case "ServiceControl": |
| 2398 | this.ParseServiceControlElement(child, id.Id); | 2398 | this.ParseServiceControlElement(child, id.Id); |
| 2399 | break; | 2399 | break; |
| 2400 | case "ServiceInstall": | 2400 | case "ServiceInstall": |
| 2401 | this.ParseServiceInstallElement(child, id.Id, win64); | 2401 | this.ParseServiceInstallElement(child, id.Id, win64); |
| 2402 | break; | 2402 | break; |
| 2403 | case "Shortcut": | 2403 | case "Shortcut": |
| 2404 | this.ParseShortcutElement(child, id.Id, node.Name.LocalName, directoryId, YesNoType.No); | 2404 | this.ParseShortcutElement(child, id.Id, node.Name.LocalName, directoryId, YesNoType.No); |
| 2405 | break; | 2405 | break; |
| 2406 | case "SymbolPath": | 2406 | case "SymbolPath": |
| 2407 | symbols.Add(this.ParseSymbolPathElement(child)); | 2407 | symbols.Add(this.ParseSymbolPathElement(child)); |
| 2408 | break; | 2408 | break; |
| 2409 | case "TypeLib": | 2409 | case "TypeLib": |
| 2410 | this.ParseTypeLibElement(child, id.Id, null, win64); | 2410 | this.ParseTypeLibElement(child, id.Id, null, win64); |
| 2411 | break; | 2411 | break; |
| 2412 | default: | 2412 | default: |
| 2413 | this.Core.UnexpectedElement(node, child); | 2413 | this.Core.UnexpectedElement(node, child); |
| 2414 | break; | 2414 | break; |
| 2415 | } | 2415 | } |
| 2416 | } | 2416 | } |
| 2417 | else | 2417 | else |
| @@ -2605,22 +2605,22 @@ namespace WixToolset.Core | |||
| 2605 | { | 2605 | { |
| 2606 | switch (attrib.Name.LocalName) | 2606 | switch (attrib.Name.LocalName) |
| 2607 | { | 2607 | { |
| 2608 | case "Id": | 2608 | case "Id": |
| 2609 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 2609 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 2610 | break; | 2610 | break; |
| 2611 | case "Directory": | 2611 | case "Directory": |
| 2612 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 2612 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 2613 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); | 2613 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); |
| 2614 | break; | 2614 | break; |
| 2615 | case "Subdirectory": | 2615 | case "Subdirectory": |
| 2616 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | 2616 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 2617 | break; | 2617 | break; |
| 2618 | case "Source": | 2618 | case "Source": |
| 2619 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 2619 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 2620 | break; | 2620 | break; |
| 2621 | default: | 2621 | default: |
| 2622 | this.Core.UnexpectedAttribute(node, attrib); | 2622 | this.Core.UnexpectedAttribute(node, attrib); |
| 2623 | break; | 2623 | break; |
| 2624 | } | 2624 | } |
| 2625 | } | 2625 | } |
| 2626 | else | 2626 | else |
| @@ -2648,24 +2648,24 @@ namespace WixToolset.Core | |||
| 2648 | { | 2648 | { |
| 2649 | switch (child.Name.LocalName) | 2649 | switch (child.Name.LocalName) |
| 2650 | { | 2650 | { |
| 2651 | case "ComponentGroupRef": | 2651 | case "ComponentGroupRef": |
| 2652 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null); | 2652 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null); |
| 2653 | break; | 2653 | break; |
| 2654 | case "ComponentRef": | 2654 | case "ComponentRef": |
| 2655 | this.ParseComponentRefElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null); | 2655 | this.ParseComponentRefElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null); |
| 2656 | break; | 2656 | break; |
| 2657 | case "Component": | 2657 | case "Component": |
| 2658 | this.ParseComponentElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null, CompilerConstants.IntegerNotSet, directoryId, source); | 2658 | this.ParseComponentElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, null, CompilerConstants.IntegerNotSet, directoryId, source); |
| 2659 | break; | 2659 | break; |
| 2660 | case "File": | 2660 | case "File": |
| 2661 | this.ParseNakedFileElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, directoryId, source); | 2661 | this.ParseNakedFileElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, directoryId, source); |
| 2662 | break; | 2662 | break; |
| 2663 | case "Files": | 2663 | case "Files": |
| 2664 | this.ParseFilesElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, directoryId, source); | 2664 | this.ParseFilesElement(child, ComplexReferenceParentType.ComponentGroup, id.Id, directoryId, source); |
| 2665 | break; | 2665 | break; |
| 2666 | default: | 2666 | default: |
| 2667 | this.Core.UnexpectedElement(node, child); | 2667 | this.Core.UnexpectedElement(node, child); |
| 2668 | break; | 2668 | break; |
| 2669 | } | 2669 | } |
| 2670 | } | 2670 | } |
| 2671 | else | 2671 | else |
| @@ -2707,16 +2707,16 @@ namespace WixToolset.Core | |||
| 2707 | { | 2707 | { |
| 2708 | switch (attrib.Name.LocalName) | 2708 | switch (attrib.Name.LocalName) |
| 2709 | { | 2709 | { |
| 2710 | case "Id": | 2710 | case "Id": |
| 2711 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 2711 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 2712 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixComponentGroup, id); | 2712 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixComponentGroup, id); |
| 2713 | break; | 2713 | break; |
| 2714 | case "Primary": | 2714 | case "Primary": |
| 2715 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 2715 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 2716 | break; | 2716 | break; |
| 2717 | default: | 2717 | default: |
| 2718 | this.Core.UnexpectedAttribute(node, attrib); | 2718 | this.Core.UnexpectedAttribute(node, attrib); |
| 2719 | break; | 2719 | break; |
| 2720 | } | 2720 | } |
| 2721 | } | 2721 | } |
| 2722 | else | 2722 | else |
| @@ -2756,16 +2756,16 @@ namespace WixToolset.Core | |||
| 2756 | { | 2756 | { |
| 2757 | switch (attrib.Name.LocalName) | 2757 | switch (attrib.Name.LocalName) |
| 2758 | { | 2758 | { |
| 2759 | case "Id": | 2759 | case "Id": |
| 2760 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 2760 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 2761 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, id); | 2761 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, id); |
| 2762 | break; | 2762 | break; |
| 2763 | case "Primary": | 2763 | case "Primary": |
| 2764 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 2764 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 2765 | break; | 2765 | break; |
| 2766 | default: | 2766 | default: |
| 2767 | this.Core.UnexpectedAttribute(node, attrib); | 2767 | this.Core.UnexpectedAttribute(node, attrib); |
| 2768 | break; | 2768 | break; |
| 2769 | } | 2769 | } |
| 2770 | } | 2770 | } |
| 2771 | else | 2771 | else |
| @@ -2802,32 +2802,32 @@ namespace WixToolset.Core | |||
| 2802 | { | 2802 | { |
| 2803 | switch (attrib.Name.LocalName) | 2803 | switch (attrib.Name.LocalName) |
| 2804 | { | 2804 | { |
| 2805 | case "Id": | 2805 | case "Id": |
| 2806 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 2806 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 2807 | break; | ||
| 2808 | case "Guid": | ||
| 2809 | componentId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | ||
| 2810 | break; | ||
| 2811 | case "Type": | ||
| 2812 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2813 | switch (typeValue) | ||
| 2814 | { | ||
| 2815 | case "directory": | ||
| 2816 | type = LocatorType.Directory; | ||
| 2817 | break; | 2807 | break; |
| 2818 | case "file": | 2808 | case "Guid": |
| 2819 | type = LocatorType.Filename; | 2809 | componentId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 2820 | break; | 2810 | break; |
| 2821 | case "": | 2811 | case "Type": |
| 2812 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2813 | switch (typeValue) | ||
| 2814 | { | ||
| 2815 | case "directory": | ||
| 2816 | type = LocatorType.Directory; | ||
| 2817 | break; | ||
| 2818 | case "file": | ||
| 2819 | type = LocatorType.Filename; | ||
| 2820 | break; | ||
| 2821 | case "": | ||
| 2822 | break; | ||
| 2823 | default: | ||
| 2824 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue, "directory", "file")); | ||
| 2825 | break; | ||
| 2826 | } | ||
| 2822 | break; | 2827 | break; |
| 2823 | default: | 2828 | default: |
| 2824 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typeValue, "directory", "file")); | 2829 | this.Core.UnexpectedAttribute(node, attrib); |
| 2825 | break; | 2830 | break; |
| 2826 | } | ||
| 2827 | break; | ||
| 2828 | default: | ||
| 2829 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 2830 | break; | ||
| 2831 | } | 2831 | } |
| 2832 | } | 2832 | } |
| 2833 | else | 2833 | else |
| @@ -2849,46 +2849,46 @@ namespace WixToolset.Core | |||
| 2849 | { | 2849 | { |
| 2850 | switch (child.Name.LocalName) | 2850 | switch (child.Name.LocalName) |
| 2851 | { | 2851 | { |
| 2852 | case "DirectorySearch": | 2852 | case "DirectorySearch": |
| 2853 | if (oneChild) | 2853 | if (oneChild) |
| 2854 | { | 2854 | { |
| 2855 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 2855 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 2856 | } | 2856 | } |
| 2857 | oneChild = true; | 2857 | oneChild = true; |
| 2858 | 2858 | ||
| 2859 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column | 2859 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column |
| 2860 | signature = this.ParseDirectorySearchElement(child, id.Id); | 2860 | signature = this.ParseDirectorySearchElement(child, id.Id); |
| 2861 | break; | 2861 | break; |
| 2862 | case "DirectorySearchRef": | 2862 | case "DirectorySearchRef": |
| 2863 | if (oneChild) | 2863 | if (oneChild) |
| 2864 | { | 2864 | { |
| 2865 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 2865 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 2866 | } | 2866 | } |
| 2867 | oneChild = true; | 2867 | oneChild = true; |
| 2868 | signature = this.ParseDirectorySearchRefElement(child, id.Id); | 2868 | signature = this.ParseDirectorySearchRefElement(child, id.Id); |
| 2869 | break; | 2869 | break; |
| 2870 | case "FileSearch": | 2870 | case "FileSearch": |
| 2871 | if (oneChild) | 2871 | if (oneChild) |
| 2872 | { | 2872 | { |
| 2873 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 2873 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 2874 | } | 2874 | } |
| 2875 | oneChild = true; | 2875 | oneChild = true; |
| 2876 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); | 2876 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); |
| 2877 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures | 2877 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures |
| 2878 | break; | 2878 | break; |
| 2879 | case "FileSearchRef": | 2879 | case "FileSearchRef": |
| 2880 | if (oneChild) | 2880 | if (oneChild) |
| 2881 | { | 2881 | { |
| 2882 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 2882 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 2883 | } | 2883 | } |
| 2884 | oneChild = true; | 2884 | oneChild = true; |
| 2885 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures | 2885 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures |
| 2886 | id = new Identifier(AccessModifier.Section, newId); | 2886 | id = new Identifier(AccessModifier.Section, newId); |
| 2887 | signature = null; | 2887 | signature = null; |
| 2888 | break; | 2888 | break; |
| 2889 | default: | 2889 | default: |
| 2890 | this.Core.UnexpectedElement(node, child); | 2890 | this.Core.UnexpectedElement(node, child); |
| 2891 | break; | 2891 | break; |
| 2892 | } | 2892 | } |
| 2893 | } | 2893 | } |
| 2894 | else | 2894 | else |
| @@ -3016,52 +3016,52 @@ namespace WixToolset.Core | |||
| 3016 | { | 3016 | { |
| 3017 | switch (attrib.Name.LocalName) | 3017 | switch (attrib.Name.LocalName) |
| 3018 | { | 3018 | { |
| 3019 | case "Id": | 3019 | case "Id": |
| 3020 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 3020 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 3021 | break; | 3021 | break; |
| 3022 | case "Delete": | 3022 | case "Delete": |
| 3023 | delete = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 3023 | delete = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 3024 | break; | 3024 | break; |
| 3025 | case "DestinationDirectory": | 3025 | case "DestinationDirectory": |
| 3026 | destinationDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3026 | destinationDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3027 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, destinationDirectory); | 3027 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, destinationDirectory); |
| 3028 | break; | 3028 | break; |
| 3029 | case "DestinationSubdirectory": | 3029 | case "DestinationSubdirectory": |
| 3030 | destinationSubdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | 3030 | destinationSubdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 3031 | break; | 3031 | break; |
| 3032 | case "DestinationName": | 3032 | case "DestinationName": |
| 3033 | destinationName = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib); | 3033 | destinationName = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib); |
| 3034 | break; | 3034 | break; |
| 3035 | case "DestinationProperty": | 3035 | case "DestinationProperty": |
| 3036 | destinationProperty = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3036 | destinationProperty = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3037 | break; | 3037 | break; |
| 3038 | case "DestinationShortName": | 3038 | case "DestinationShortName": |
| 3039 | destinationShortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib); | 3039 | destinationShortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib); |
| 3040 | break; | 3040 | break; |
| 3041 | case "FileId": | 3041 | case "FileId": |
| 3042 | if (null != fileId) | 3042 | if (null != fileId) |
| 3043 | { | 3043 | { |
| 3044 | this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | 3044 | this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); |
| 3045 | } | 3045 | } |
| 3046 | fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3046 | fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3047 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, fileId); | 3047 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, fileId); |
| 3048 | break; | 3048 | break; |
| 3049 | case "SourceDirectory": | 3049 | case "SourceDirectory": |
| 3050 | sourceDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3050 | sourceDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3051 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, sourceDirectory); | 3051 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, sourceDirectory); |
| 3052 | break; | 3052 | break; |
| 3053 | case "SourceSubdirectory": | 3053 | case "SourceSubdirectory": |
| 3054 | sourceSubdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | 3054 | sourceSubdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 3055 | break; | 3055 | break; |
| 3056 | case "SourceName": | 3056 | case "SourceName": |
| 3057 | sourceName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 3057 | sourceName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3058 | break; | 3058 | break; |
| 3059 | case "SourceProperty": | 3059 | case "SourceProperty": |
| 3060 | sourceProperty = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3060 | sourceProperty = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3061 | break; | 3061 | break; |
| 3062 | default: | 3062 | default: |
| 3063 | this.Core.UnexpectedAttribute(node, attrib); | 3063 | this.Core.UnexpectedAttribute(node, attrib); |
| 3064 | break; | 3064 | break; |
| 3065 | } | 3065 | } |
| 3066 | } | 3066 | } |
| 3067 | else | 3067 | else |
| @@ -3203,233 +3203,233 @@ namespace WixToolset.Core | |||
| 3203 | { | 3203 | { |
| 3204 | switch (attrib.Name.LocalName) | 3204 | switch (attrib.Name.LocalName) |
| 3205 | { | 3205 | { |
| 3206 | case "Id": | 3206 | case "Id": |
| 3207 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 3207 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 3208 | break; | ||
| 3209 | case "BinaryRef": | ||
| 3210 | if (null != source) | ||
| 3211 | { | ||
| 3212 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3213 | } | ||
| 3214 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 3215 | sourceType = CustomActionSourceType.Binary; | ||
| 3216 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, source); // add a reference to the appropriate Binary | ||
| 3217 | break; | ||
| 3218 | case "Bitness": | ||
| 3219 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3220 | switch (bitnessValue) | ||
| 3221 | { | ||
| 3222 | case "always32": | ||
| 3223 | explicitWin64 = true; | ||
| 3224 | win64 = false; | ||
| 3225 | break; | ||
| 3226 | case "always64": | ||
| 3227 | explicitWin64 = true; | ||
| 3228 | win64 = true; | ||
| 3229 | break; | ||
| 3230 | case "default": | ||
| 3231 | case "": | ||
| 3232 | break; | ||
| 3233 | default: | ||
| 3234 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | ||
| 3235 | break; | 3208 | break; |
| 3236 | } | 3209 | case "BinaryRef": |
| 3237 | break; | 3210 | if (null != source) |
| 3238 | case "Directory": | 3211 | { |
| 3239 | if (null != source) | 3212 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); |
| 3240 | { | 3213 | } |
| 3241 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileRef", "Property", "Script")); | 3214 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3242 | } | 3215 | sourceType = CustomActionSourceType.Binary; |
| 3243 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3216 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, source); // add a reference to the appropriate Binary |
| 3244 | sourceType = CustomActionSourceType.Directory; | ||
| 3245 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, source); | ||
| 3246 | break; | ||
| 3247 | case "DllEntry": | ||
| 3248 | if (null != target) | ||
| 3249 | { | ||
| 3250 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3251 | } | ||
| 3252 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3253 | targetType = CustomActionTargetType.Dll; | ||
| 3254 | break; | ||
| 3255 | case "Error": | ||
| 3256 | if (null != target) | ||
| 3257 | { | ||
| 3258 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3259 | } | ||
| 3260 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3261 | sourceType = CustomActionSourceType.File; | ||
| 3262 | targetType = CustomActionTargetType.TextData; | ||
| 3263 | |||
| 3264 | // The target can be either a formatted error string or a literal | ||
| 3265 | // error number. Try to convert to error number to determine whether | ||
| 3266 | // to add a reference. No need to look at the value. | ||
| 3267 | if (Int32.TryParse(target, out var ignored)) | ||
| 3268 | { | ||
| 3269 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Error, target); | ||
| 3270 | } | ||
| 3271 | break; | ||
| 3272 | case "ExeCommand": | ||
| 3273 | if (null != target) | ||
| 3274 | { | ||
| 3275 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3276 | } | ||
| 3277 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3278 | targetType = CustomActionTargetType.Exe; | ||
| 3279 | break; | ||
| 3280 | case "Execute": | ||
| 3281 | var execute = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3282 | switch (execute) | ||
| 3283 | { | ||
| 3284 | case "commit": | ||
| 3285 | executionType = CustomActionExecutionType.Commit; | ||
| 3286 | break; | 3217 | break; |
| 3287 | case "deferred": | 3218 | case "Bitness": |
| 3288 | executionType = CustomActionExecutionType.Deferred; | 3219 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3220 | switch (bitnessValue) | ||
| 3221 | { | ||
| 3222 | case "always32": | ||
| 3223 | explicitWin64 = true; | ||
| 3224 | win64 = false; | ||
| 3225 | break; | ||
| 3226 | case "always64": | ||
| 3227 | explicitWin64 = true; | ||
| 3228 | win64 = true; | ||
| 3229 | break; | ||
| 3230 | case "default": | ||
| 3231 | case "": | ||
| 3232 | break; | ||
| 3233 | default: | ||
| 3234 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | ||
| 3235 | break; | ||
| 3236 | } | ||
| 3289 | break; | 3237 | break; |
| 3290 | case "firstSequence": | 3238 | case "Directory": |
| 3291 | executionType = CustomActionExecutionType.FirstSequence; | 3239 | if (null != source) |
| 3240 | { | ||
| 3241 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryKey", "Directory", "FileRef", "Property", "Script")); | ||
| 3242 | } | ||
| 3243 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 3244 | sourceType = CustomActionSourceType.Directory; | ||
| 3245 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, source); | ||
| 3292 | break; | 3246 | break; |
| 3293 | case "immediate": | 3247 | case "DllEntry": |
| 3294 | executionType = CustomActionExecutionType.Immediate; | 3248 | if (null != target) |
| 3249 | { | ||
| 3250 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3251 | } | ||
| 3252 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3253 | targetType = CustomActionTargetType.Dll; | ||
| 3295 | break; | 3254 | break; |
| 3296 | case "oncePerProcess": | 3255 | case "Error": |
| 3297 | executionType = CustomActionExecutionType.OncePerProcess; | 3256 | if (null != target) |
| 3257 | { | ||
| 3258 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3259 | } | ||
| 3260 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3261 | sourceType = CustomActionSourceType.File; | ||
| 3262 | targetType = CustomActionTargetType.TextData; | ||
| 3263 | |||
| 3264 | // The target can be either a formatted error string or a literal | ||
| 3265 | // error number. Try to convert to error number to determine whether | ||
| 3266 | // to add a reference. No need to look at the value. | ||
| 3267 | if (Int32.TryParse(target, out var ignored)) | ||
| 3268 | { | ||
| 3269 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Error, target); | ||
| 3270 | } | ||
| 3298 | break; | 3271 | break; |
| 3299 | case "rollback": | 3272 | case "ExeCommand": |
| 3300 | executionType = CustomActionExecutionType.Rollback; | 3273 | if (null != target) |
| 3274 | { | ||
| 3275 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3276 | } | ||
| 3277 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3278 | targetType = CustomActionTargetType.Exe; | ||
| 3301 | break; | 3279 | break; |
| 3302 | case "secondSequence": | 3280 | case "Execute": |
| 3303 | executionType = CustomActionExecutionType.ClientRepeat; | 3281 | var execute = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3282 | switch (execute) | ||
| 3283 | { | ||
| 3284 | case "commit": | ||
| 3285 | executionType = CustomActionExecutionType.Commit; | ||
| 3286 | break; | ||
| 3287 | case "deferred": | ||
| 3288 | executionType = CustomActionExecutionType.Deferred; | ||
| 3289 | break; | ||
| 3290 | case "firstSequence": | ||
| 3291 | executionType = CustomActionExecutionType.FirstSequence; | ||
| 3292 | break; | ||
| 3293 | case "immediate": | ||
| 3294 | executionType = CustomActionExecutionType.Immediate; | ||
| 3295 | break; | ||
| 3296 | case "oncePerProcess": | ||
| 3297 | executionType = CustomActionExecutionType.OncePerProcess; | ||
| 3298 | break; | ||
| 3299 | case "rollback": | ||
| 3300 | executionType = CustomActionExecutionType.Rollback; | ||
| 3301 | break; | ||
| 3302 | case "secondSequence": | ||
| 3303 | executionType = CustomActionExecutionType.ClientRepeat; | ||
| 3304 | break; | ||
| 3305 | default: | ||
| 3306 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, execute, "commit", "deferred", "firstSequence", "immediate", "oncePerProcess", "rollback", "secondSequence")); | ||
| 3307 | break; | ||
| 3308 | } | ||
| 3304 | break; | 3309 | break; |
| 3305 | default: | 3310 | case "FileRef": |
| 3306 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, execute, "commit", "deferred", "firstSequence", "immediate", "oncePerProcess", "rollback", "secondSequence")); | 3311 | if (null != source) |
| 3312 | { | ||
| 3313 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3314 | } | ||
| 3315 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 3316 | sourceType = CustomActionSourceType.File; | ||
| 3317 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, source); // add a reference to the appropriate File | ||
| 3307 | break; | 3318 | break; |
| 3308 | } | 3319 | case "HideTarget": |
| 3309 | break; | 3320 | hidden = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 3310 | case "FileRef": | ||
| 3311 | if (null != source) | ||
| 3312 | { | ||
| 3313 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3314 | } | ||
| 3315 | source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 3316 | sourceType = CustomActionSourceType.File; | ||
| 3317 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, source); // add a reference to the appropriate File | ||
| 3318 | break; | ||
| 3319 | case "HideTarget": | ||
| 3320 | hidden = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3321 | break; | ||
| 3322 | case "Impersonate": | ||
| 3323 | impersonate = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3324 | break; | ||
| 3325 | case "JScriptCall": | ||
| 3326 | if (null != target) | ||
| 3327 | { | ||
| 3328 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3329 | } | ||
| 3330 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3331 | targetType = CustomActionTargetType.JScript; | ||
| 3332 | break; | ||
| 3333 | case "PatchUninstall": | ||
| 3334 | patchUninstall = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3335 | break; | ||
| 3336 | case "Property": | ||
| 3337 | if (null != source) | ||
| 3338 | { | ||
| 3339 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3340 | } | ||
| 3341 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3342 | sourceType = CustomActionSourceType.Property; | ||
| 3343 | break; | ||
| 3344 | case "Return": | ||
| 3345 | var returnValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3346 | switch (returnValue) | ||
| 3347 | { | ||
| 3348 | case "asyncNoWait": | ||
| 3349 | async = true; | ||
| 3350 | ignoreResult = true; | ||
| 3351 | break; | 3321 | break; |
| 3352 | case "asyncWait": | 3322 | case "Impersonate": |
| 3353 | async = true; | 3323 | impersonate = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 3354 | break; | 3324 | break; |
| 3355 | case "check": | 3325 | case "JScriptCall": |
| 3326 | if (null != target) | ||
| 3327 | { | ||
| 3328 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3329 | } | ||
| 3330 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3331 | targetType = CustomActionTargetType.JScript; | ||
| 3356 | break; | 3332 | break; |
| 3357 | case "ignore": | 3333 | case "PatchUninstall": |
| 3358 | ignoreResult = true; | 3334 | patchUninstall = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 3359 | break; | 3335 | break; |
| 3360 | case "": | 3336 | case "Property": |
| 3337 | if (null != source) | ||
| 3338 | { | ||
| 3339 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3340 | } | ||
| 3341 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3342 | sourceType = CustomActionSourceType.Property; | ||
| 3361 | break; | 3343 | break; |
| 3362 | default: | 3344 | case "Return": |
| 3363 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, returnValue, "asyncNoWait", "asyncWait", "check", "ignore")); | 3345 | var returnValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3346 | switch (returnValue) | ||
| 3347 | { | ||
| 3348 | case "asyncNoWait": | ||
| 3349 | async = true; | ||
| 3350 | ignoreResult = true; | ||
| 3351 | break; | ||
| 3352 | case "asyncWait": | ||
| 3353 | async = true; | ||
| 3354 | break; | ||
| 3355 | case "check": | ||
| 3356 | break; | ||
| 3357 | case "ignore": | ||
| 3358 | ignoreResult = true; | ||
| 3359 | break; | ||
| 3360 | case "": | ||
| 3361 | break; | ||
| 3362 | default: | ||
| 3363 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, returnValue, "asyncNoWait", "asyncWait", "check", "ignore")); | ||
| 3364 | break; | ||
| 3365 | } | ||
| 3364 | break; | 3366 | break; |
| 3365 | } | 3367 | case "Script": |
| 3366 | break; | 3368 | if (null != source) |
| 3367 | case "Script": | 3369 | { |
| 3368 | if (null != source) | 3370 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); |
| 3369 | { | 3371 | } |
| 3370 | this.Core.Write(ErrorMessages.CustomActionMultipleSources(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "BinaryRef", "Directory", "FileRef", "Property", "Script")); | ||
| 3371 | } | ||
| 3372 | 3372 | ||
| 3373 | if (null != target) | 3373 | if (null != target) |
| 3374 | { | 3374 | { |
| 3375 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | 3375 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); |
| 3376 | } | 3376 | } |
| 3377 | 3377 | ||
| 3378 | // set the source and target to empty string for error messages when the user sets multiple sources or targets | 3378 | // set the source and target to empty string for error messages when the user sets multiple sources or targets |
| 3379 | source = String.Empty; | 3379 | source = String.Empty; |
| 3380 | target = String.Empty; | 3380 | target = String.Empty; |
| 3381 | 3381 | ||
| 3382 | inlineScript = true; | 3382 | inlineScript = true; |
| 3383 | 3383 | ||
| 3384 | var script = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 3384 | var script = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3385 | switch (script) | 3385 | switch (script) |
| 3386 | { | 3386 | { |
| 3387 | case "jscript": | 3387 | case "jscript": |
| 3388 | sourceType = CustomActionSourceType.Directory; | 3388 | sourceType = CustomActionSourceType.Directory; |
| 3389 | targetType = CustomActionTargetType.JScript; | 3389 | targetType = CustomActionTargetType.JScript; |
| 3390 | break; | ||
| 3391 | case "vbscript": | ||
| 3392 | sourceType = CustomActionSourceType.Directory; | ||
| 3393 | targetType = CustomActionTargetType.VBScript; | ||
| 3394 | break; | ||
| 3395 | case "": | ||
| 3396 | break; | ||
| 3397 | default: | ||
| 3398 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, script, "jscript", "vbscript")); | ||
| 3399 | break; | ||
| 3400 | } | ||
| 3390 | break; | 3401 | break; |
| 3391 | case "vbscript": | 3402 | case "ScriptSourceFile": |
| 3392 | sourceType = CustomActionSourceType.Directory; | 3403 | scriptFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3393 | targetType = CustomActionTargetType.VBScript; | 3404 | break; |
| 3405 | case "Subdirectory": | ||
| 3406 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | ||
| 3394 | break; | 3407 | break; |
| 3395 | case "": | 3408 | case "SuppressModularization": |
| 3409 | suppressModularization = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3410 | break; | ||
| 3411 | case "TerminalServerAware": | ||
| 3412 | tsAware = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3413 | break; | ||
| 3414 | case "Value": | ||
| 3415 | if (null != target) | ||
| 3416 | { | ||
| 3417 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3418 | } | ||
| 3419 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3420 | targetType = CustomActionTargetType.TextData; | ||
| 3421 | break; | ||
| 3422 | case "VBScriptCall": | ||
| 3423 | if (null != target) | ||
| 3424 | { | ||
| 3425 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3426 | } | ||
| 3427 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3428 | targetType = CustomActionTargetType.VBScript; | ||
| 3396 | break; | 3429 | break; |
| 3397 | default: | 3430 | default: |
| 3398 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, script, "jscript", "vbscript")); | 3431 | this.Core.UnexpectedAttribute(node, attrib); |
| 3399 | break; | 3432 | break; |
| 3400 | } | ||
| 3401 | break; | ||
| 3402 | case "ScriptSourceFile": | ||
| 3403 | scriptFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 3404 | break; | ||
| 3405 | case "Subdirectory": | ||
| 3406 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | ||
| 3407 | break; | ||
| 3408 | case "SuppressModularization": | ||
| 3409 | suppressModularization = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3410 | break; | ||
| 3411 | case "TerminalServerAware": | ||
| 3412 | tsAware = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 3413 | break; | ||
| 3414 | case "Value": | ||
| 3415 | if (null != target) | ||
| 3416 | { | ||
| 3417 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3418 | } | ||
| 3419 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3420 | targetType = CustomActionTargetType.TextData; | ||
| 3421 | break; | ||
| 3422 | case "VBScriptCall": | ||
| 3423 | if (null != target) | ||
| 3424 | { | ||
| 3425 | this.Core.Write(ErrorMessages.CustomActionMultipleTargets(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "DllEntry", "Error", "ExeCommand", "JScriptCall", "Script", "Value", "VBScriptCall")); | ||
| 3426 | } | ||
| 3427 | target = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); // one of the few cases where an empty string value is valid | ||
| 3428 | targetType = CustomActionTargetType.VBScript; | ||
| 3429 | break; | ||
| 3430 | default: | ||
| 3431 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 3432 | break; | ||
| 3433 | } | 3433 | } |
| 3434 | } | 3434 | } |
| 3435 | else | 3435 | else |
| @@ -3600,13 +3600,13 @@ namespace WixToolset.Core | |||
| 3600 | { | 3600 | { |
| 3601 | switch (attrib.Name.LocalName) | 3601 | switch (attrib.Name.LocalName) |
| 3602 | { | 3602 | { |
| 3603 | case "Id": | 3603 | case "Id": |
| 3604 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3604 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3605 | this.Core.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, id); | 3605 | this.Core.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, id); |
| 3606 | break; | 3606 | break; |
| 3607 | default: | 3607 | default: |
| 3608 | this.Core.UnexpectedAttribute(node, attrib); | 3608 | this.Core.UnexpectedAttribute(node, attrib); |
| 3609 | break; | 3609 | break; |
| 3610 | } | 3610 | } |
| 3611 | } | 3611 | } |
| 3612 | else | 3612 | else |
| @@ -3643,15 +3643,15 @@ namespace WixToolset.Core | |||
| 3643 | { | 3643 | { |
| 3644 | switch (attrib.Name.LocalName) | 3644 | switch (attrib.Name.LocalName) |
| 3645 | { | 3645 | { |
| 3646 | case "Id": | 3646 | case "Id": |
| 3647 | primaryKeys[0] = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3647 | primaryKeys[0] = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3648 | break; | 3648 | break; |
| 3649 | case "ProductCode": | 3649 | case "ProductCode": |
| 3650 | primaryKeys[1] = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3650 | primaryKeys[1] = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3651 | break; | 3651 | break; |
| 3652 | default: | 3652 | default: |
| 3653 | this.Core.UnexpectedAttribute(node, attrib); | 3653 | this.Core.UnexpectedAttribute(node, attrib); |
| 3654 | break; | 3654 | break; |
| 3655 | } | 3655 | } |
| 3656 | } | 3656 | } |
| 3657 | else | 3657 | else |
| @@ -3690,12 +3690,12 @@ namespace WixToolset.Core | |||
| 3690 | { | 3690 | { |
| 3691 | switch (attrib.Name.LocalName) | 3691 | switch (attrib.Name.LocalName) |
| 3692 | { | 3692 | { |
| 3693 | case "Id": | 3693 | case "Id": |
| 3694 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3694 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3695 | break; | 3695 | break; |
| 3696 | default: | 3696 | default: |
| 3697 | this.Core.UnexpectedAttribute(node, attrib); | 3697 | this.Core.UnexpectedAttribute(node, attrib); |
| 3698 | break; | 3698 | break; |
| 3699 | } | 3699 | } |
| 3700 | } | 3700 | } |
| 3701 | else | 3701 | else |
| @@ -3744,49 +3744,49 @@ namespace WixToolset.Core | |||
| 3744 | { | 3744 | { |
| 3745 | switch (attrib.Name.LocalName) | 3745 | switch (attrib.Name.LocalName) |
| 3746 | { | 3746 | { |
| 3747 | case "Id": | 3747 | case "Id": |
| 3748 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 3748 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 3749 | break; | 3749 | break; |
| 3750 | case "ComponentGuidGenerationSeed": | 3750 | case "ComponentGuidGenerationSeed": |
| 3751 | componentGuidGenerationSeed = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 3751 | componentGuidGenerationSeed = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 3752 | break; | 3752 | break; |
| 3753 | case "DiskId": | 3753 | case "DiskId": |
| 3754 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 3754 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 3755 | break; | 3755 | break; |
| 3756 | case "FileSource": | 3756 | case "FileSource": |
| 3757 | fileSource = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 3757 | fileSource = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3758 | fileSourceAttribSet = true; | 3758 | fileSourceAttribSet = true; |
| 3759 | break; | 3759 | break; |
| 3760 | case "Name": | 3760 | case "Name": |
| 3761 | if ("." == attrib.Value) | 3761 | if ("." == attrib.Value) |
| 3762 | { | 3762 | { |
| 3763 | name = attrib.Value; | 3763 | name = attrib.Value; |
| 3764 | } | 3764 | } |
| 3765 | else | 3765 | else |
| 3766 | { | 3766 | { |
| 3767 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | 3767 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 3768 | } | 3768 | } |
| 3769 | nameAttribute = attrib; | 3769 | nameAttribute = attrib; |
| 3770 | break; | 3770 | break; |
| 3771 | case "ShortName": | 3771 | case "ShortName": |
| 3772 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | 3772 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); |
| 3773 | break; | 3773 | break; |
| 3774 | case "ShortSourceName": | 3774 | case "ShortSourceName": |
| 3775 | shortSourceName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | 3775 | shortSourceName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); |
| 3776 | break; | 3776 | break; |
| 3777 | case "SourceName": | 3777 | case "SourceName": |
| 3778 | if ("." == attrib.Value) | 3778 | if ("." == attrib.Value) |
| 3779 | { | 3779 | { |
| 3780 | sourceName = attrib.Value; | 3780 | sourceName = attrib.Value; |
| 3781 | } | 3781 | } |
| 3782 | else | 3782 | else |
| 3783 | { | 3783 | { |
| 3784 | sourceName = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); | 3784 | sourceName = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); |
| 3785 | } | 3785 | } |
| 3786 | break; | 3786 | break; |
| 3787 | default: | 3787 | default: |
| 3788 | this.Core.UnexpectedAttribute(node, attrib); | 3788 | this.Core.UnexpectedAttribute(node, attrib); |
| 3789 | break; | 3789 | break; |
| 3790 | } | 3790 | } |
| 3791 | } | 3791 | } |
| 3792 | else | 3792 | else |
| @@ -3880,34 +3880,34 @@ namespace WixToolset.Core | |||
| 3880 | { | 3880 | { |
| 3881 | switch (child.Name.LocalName) | 3881 | switch (child.Name.LocalName) |
| 3882 | { | 3882 | { |
| 3883 | case "Component": | 3883 | case "Component": |
| 3884 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, diskId, id.Id, fileSource); | 3884 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, diskId, id.Id, fileSource); |
| 3885 | break; | 3885 | break; |
| 3886 | case "Directory": | 3886 | case "Directory": |
| 3887 | this.ParseDirectoryElement(child, id.Id, diskId, fileSource); | 3887 | this.ParseDirectoryElement(child, id.Id, diskId, fileSource); |
| 3888 | break; | 3888 | break; |
| 3889 | case "File": | 3889 | case "File": |
| 3890 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, id.Id, fileSource); | 3890 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, id.Id, fileSource); |
| 3891 | break; | 3891 | break; |
| 3892 | case "Files": | 3892 | case "Files": |
| 3893 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, id.Id, fileSource); | 3893 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, id.Id, fileSource); |
| 3894 | break; | 3894 | break; |
| 3895 | case "Merge": | 3895 | case "Merge": |
| 3896 | this.ParseMergeElement(child, id.Id, diskId); | 3896 | this.ParseMergeElement(child, id.Id, diskId); |
| 3897 | break; | 3897 | break; |
| 3898 | case "SymbolPath": | 3898 | case "SymbolPath": |
| 3899 | if (null != symbols) | 3899 | if (null != symbols) |
| 3900 | { | 3900 | { |
| 3901 | symbols += ";" + this.ParseSymbolPathElement(child); | 3901 | symbols += ";" + this.ParseSymbolPathElement(child); |
| 3902 | } | 3902 | } |
| 3903 | else | 3903 | else |
| 3904 | { | 3904 | { |
| 3905 | symbols = this.ParseSymbolPathElement(child); | 3905 | symbols = this.ParseSymbolPathElement(child); |
| 3906 | } | 3906 | } |
| 3907 | break; | 3907 | break; |
| 3908 | default: | 3908 | default: |
| 3909 | this.Core.UnexpectedElement(node, child); | 3909 | this.Core.UnexpectedElement(node, child); |
| 3910 | break; | 3910 | break; |
| 3911 | } | 3911 | } |
| 3912 | } | 3912 | } |
| 3913 | else | 3913 | else |
| @@ -3957,19 +3957,19 @@ namespace WixToolset.Core | |||
| 3957 | { | 3957 | { |
| 3958 | switch (attrib.Name.LocalName) | 3958 | switch (attrib.Name.LocalName) |
| 3959 | { | 3959 | { |
| 3960 | case "Id": | 3960 | case "Id": |
| 3961 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 3961 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 3962 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, id); | 3962 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, id); |
| 3963 | break; | 3963 | break; |
| 3964 | case "DiskId": | 3964 | case "DiskId": |
| 3965 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 3965 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 3966 | break; | 3966 | break; |
| 3967 | case "FileSource": | 3967 | case "FileSource": |
| 3968 | fileSource = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 3968 | fileSource = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 3969 | break; | 3969 | break; |
| 3970 | default: | 3970 | default: |
| 3971 | this.Core.UnexpectedAttribute(node, attrib); | 3971 | this.Core.UnexpectedAttribute(node, attrib); |
| 3972 | break; | 3972 | break; |
| 3973 | } | 3973 | } |
| 3974 | } | 3974 | } |
| 3975 | else | 3975 | else |
| @@ -4002,24 +4002,24 @@ namespace WixToolset.Core | |||
| 4002 | { | 4002 | { |
| 4003 | switch (child.Name.LocalName) | 4003 | switch (child.Name.LocalName) |
| 4004 | { | 4004 | { |
| 4005 | case "Component": | 4005 | case "Component": |
| 4006 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, diskId, id, fileSource); | 4006 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, diskId, id, fileSource); |
| 4007 | break; | 4007 | break; |
| 4008 | case "Directory": | 4008 | case "Directory": |
| 4009 | this.ParseDirectoryElement(child, id, diskId, fileSource); | 4009 | this.ParseDirectoryElement(child, id, diskId, fileSource); |
| 4010 | break; | 4010 | break; |
| 4011 | case "File": | 4011 | case "File": |
| 4012 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, id, fileSource); | 4012 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, id, fileSource); |
| 4013 | break; | 4013 | break; |
| 4014 | case "Files": | 4014 | case "Files": |
| 4015 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, id, fileSource); | 4015 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, id, fileSource); |
| 4016 | break; | 4016 | break; |
| 4017 | case "Merge": | 4017 | case "Merge": |
| 4018 | this.ParseMergeElement(child, id, diskId); | 4018 | this.ParseMergeElement(child, id, diskId); |
| 4019 | break; | 4019 | break; |
| 4020 | default: | 4020 | default: |
| 4021 | this.Core.UnexpectedElement(node, child); | 4021 | this.Core.UnexpectedElement(node, child); |
| 4022 | break; | 4022 | break; |
| 4023 | } | 4023 | } |
| 4024 | } | 4024 | } |
| 4025 | else | 4025 | else |
| @@ -4049,21 +4049,21 @@ namespace WixToolset.Core | |||
| 4049 | { | 4049 | { |
| 4050 | switch (attrib.Name.LocalName) | 4050 | switch (attrib.Name.LocalName) |
| 4051 | { | 4051 | { |
| 4052 | case "Id": | 4052 | case "Id": |
| 4053 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4053 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4054 | break; | 4054 | break; |
| 4055 | case "Depth": | 4055 | case "Depth": |
| 4056 | depth = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | 4056 | depth = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); |
| 4057 | break; | 4057 | break; |
| 4058 | case "Path": | 4058 | case "Path": |
| 4059 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 4059 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4060 | break; | 4060 | break; |
| 4061 | case "AssignToProperty": | 4061 | case "AssignToProperty": |
| 4062 | assignToProperty = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 4062 | assignToProperty = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4063 | break; | 4063 | break; |
| 4064 | default: | 4064 | default: |
| 4065 | this.Core.UnexpectedAttribute(node, attrib); | 4065 | this.Core.UnexpectedAttribute(node, attrib); |
| 4066 | break; | 4066 | break; |
| 4067 | } | 4067 | } |
| 4068 | } | 4068 | } |
| 4069 | else | 4069 | else |
| @@ -4088,42 +4088,42 @@ namespace WixToolset.Core | |||
| 4088 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 4088 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
| 4089 | switch (child.Name.LocalName) | 4089 | switch (child.Name.LocalName) |
| 4090 | { | 4090 | { |
| 4091 | case "DirectorySearch": | 4091 | case "DirectorySearch": |
| 4092 | if (oneChild) | 4092 | if (oneChild) |
| 4093 | { | 4093 | { |
| 4094 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 4094 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 4095 | } | 4095 | } |
| 4096 | oneChild = true; | 4096 | oneChild = true; |
| 4097 | signature = this.ParseDirectorySearchElement(child, id.Id); | 4097 | signature = this.ParseDirectorySearchElement(child, id.Id); |
| 4098 | break; | 4098 | break; |
| 4099 | case "DirectorySearchRef": | 4099 | case "DirectorySearchRef": |
| 4100 | if (oneChild) | 4100 | if (oneChild) |
| 4101 | { | 4101 | { |
| 4102 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 4102 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 4103 | } | 4103 | } |
| 4104 | oneChild = true; | 4104 | oneChild = true; |
| 4105 | signature = this.ParseDirectorySearchRefElement(child, id.Id); | 4105 | signature = this.ParseDirectorySearchRefElement(child, id.Id); |
| 4106 | break; | 4106 | break; |
| 4107 | case "FileSearch": | 4107 | case "FileSearch": |
| 4108 | if (oneChild) | 4108 | if (oneChild) |
| 4109 | { | 4109 | { |
| 4110 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 4110 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 4111 | } | 4111 | } |
| 4112 | oneChild = true; | 4112 | oneChild = true; |
| 4113 | hasFileSearch = true; | 4113 | hasFileSearch = true; |
| 4114 | signature = this.ParseFileSearchElement(child, id.Id, assignToProperty, depth); | 4114 | signature = this.ParseFileSearchElement(child, id.Id, assignToProperty, depth); |
| 4115 | break; | 4115 | break; |
| 4116 | case "FileSearchRef": | 4116 | case "FileSearchRef": |
| 4117 | if (oneChild) | 4117 | if (oneChild) |
| 4118 | { | 4118 | { |
| 4119 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 4119 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 4120 | } | 4120 | } |
| 4121 | oneChild = true; | 4121 | oneChild = true; |
| 4122 | signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); | 4122 | signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); |
| 4123 | break; | 4123 | break; |
| 4124 | default: | 4124 | default: |
| 4125 | this.Core.UnexpectedElement(node, child); | 4125 | this.Core.UnexpectedElement(node, child); |
| 4126 | break; | 4126 | break; |
| 4127 | } | 4127 | } |
| 4128 | 4128 | ||
| 4129 | // If AssignToProperty is set, only a FileSearch | 4129 | // If AssignToProperty is set, only a FileSearch |
| @@ -4199,18 +4199,18 @@ namespace WixToolset.Core | |||
| 4199 | { | 4199 | { |
| 4200 | switch (attrib.Name.LocalName) | 4200 | switch (attrib.Name.LocalName) |
| 4201 | { | 4201 | { |
| 4202 | case "Id": | 4202 | case "Id": |
| 4203 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4203 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4204 | break; | 4204 | break; |
| 4205 | case "Parent": | 4205 | case "Parent": |
| 4206 | parent = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4206 | parent = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4207 | break; | 4207 | break; |
| 4208 | case "Path": | 4208 | case "Path": |
| 4209 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 4209 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4210 | break; | 4210 | break; |
| 4211 | default: | 4211 | default: |
| 4212 | this.Core.UnexpectedAttribute(node, attrib); | 4212 | this.Core.UnexpectedAttribute(node, attrib); |
| 4213 | break; | 4213 | break; |
| 4214 | } | 4214 | } |
| 4215 | } | 4215 | } |
| 4216 | else | 4216 | else |
| @@ -4246,41 +4246,41 @@ namespace WixToolset.Core | |||
| 4246 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 4246 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
| 4247 | switch (child.Name.LocalName) | 4247 | switch (child.Name.LocalName) |
| 4248 | { | 4248 | { |
| 4249 | case "DirectorySearch": | 4249 | case "DirectorySearch": |
| 4250 | if (oneChild) | 4250 | if (oneChild) |
| 4251 | { | 4251 | { |
| 4252 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 4252 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 4253 | } | 4253 | } |
| 4254 | oneChild = true; | 4254 | oneChild = true; |
| 4255 | signature = this.ParseDirectorySearchElement(child, id.Id); | 4255 | signature = this.ParseDirectorySearchElement(child, id.Id); |
| 4256 | break; | 4256 | break; |
| 4257 | case "DirectorySearchRef": | 4257 | case "DirectorySearchRef": |
| 4258 | if (oneChild) | 4258 | if (oneChild) |
| 4259 | { | 4259 | { |
| 4260 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 4260 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 4261 | } | 4261 | } |
| 4262 | oneChild = true; | 4262 | oneChild = true; |
| 4263 | signature = this.ParseDirectorySearchRefElement(child, id.Id); | 4263 | signature = this.ParseDirectorySearchRefElement(child, id.Id); |
| 4264 | break; | 4264 | break; |
| 4265 | case "FileSearch": | 4265 | case "FileSearch": |
| 4266 | if (oneChild) | 4266 | if (oneChild) |
| 4267 | { | 4267 | { |
| 4268 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 4268 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 4269 | } | 4269 | } |
| 4270 | oneChild = true; | 4270 | oneChild = true; |
| 4271 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); | 4271 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); |
| 4272 | break; | 4272 | break; |
| 4273 | case "FileSearchRef": | 4273 | case "FileSearchRef": |
| 4274 | if (oneChild) | 4274 | if (oneChild) |
| 4275 | { | 4275 | { |
| 4276 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 4276 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 4277 | } | 4277 | } |
| 4278 | oneChild = true; | 4278 | oneChild = true; |
| 4279 | signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); | 4279 | signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); |
| 4280 | break; | 4280 | break; |
| 4281 | default: | 4281 | default: |
| 4282 | this.Core.UnexpectedElement(node, child); | 4282 | this.Core.UnexpectedElement(node, child); |
| 4283 | break; | 4283 | break; |
| 4284 | } | 4284 | } |
| 4285 | } | 4285 | } |
| 4286 | else | 4286 | else |
| @@ -4324,80 +4324,80 @@ namespace WixToolset.Core | |||
| 4324 | { | 4324 | { |
| 4325 | switch (attrib.Name.LocalName) | 4325 | switch (attrib.Name.LocalName) |
| 4326 | { | 4326 | { |
| 4327 | case "Id": | 4327 | case "Id": |
| 4328 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4328 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4329 | break; | ||
| 4330 | case "AllowAbsent": | ||
| 4331 | disallowAbsent = (this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) == YesNoType.No); | ||
| 4332 | break; | ||
| 4333 | case "AllowAdvertise": | ||
| 4334 | disallowAdvertise = (this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) == YesNoType.No); | ||
| 4335 | break; | ||
| 4336 | case "ConfigurableDirectory": | ||
| 4337 | configurableDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 4338 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, configurableDirectory); | ||
| 4339 | break; | ||
| 4340 | case "Description": | ||
| 4341 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4342 | break; | ||
| 4343 | case "Display": | ||
| 4344 | displayValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4345 | break; | ||
| 4346 | case "InstallDefault": | ||
| 4347 | var installDefaultValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4348 | switch (installDefaultValue) | ||
| 4349 | { | ||
| 4350 | case "followParent": | ||
| 4351 | if (ComplexReferenceParentType.Product == parentType) | ||
| 4352 | { | ||
| 4353 | this.Core.Write(ErrorMessages.RootFeatureCannotFollowParent(sourceLineNumbers)); | ||
| 4354 | } | ||
| 4355 | //bits = bits | MsiInterop.MsidbFeatureAttributesFollowParent; | ||
| 4356 | installDefault = FeatureInstallDefault.FollowParent; | ||
| 4357 | break; | 4329 | break; |
| 4358 | case "local": // this is the default | 4330 | case "AllowAbsent": |
| 4359 | installDefault = FeatureInstallDefault.Local; | 4331 | disallowAbsent = (this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) == YesNoType.No); |
| 4360 | break; | 4332 | break; |
| 4361 | case "source": | 4333 | case "AllowAdvertise": |
| 4362 | //bits = bits | MsiInterop.MsidbFeatureAttributesFavorSource; | 4334 | disallowAdvertise = (this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) == YesNoType.No); |
| 4363 | installDefault = FeatureInstallDefault.Source; | ||
| 4364 | break; | 4335 | break; |
| 4365 | case "": | 4336 | case "ConfigurableDirectory": |
| 4337 | configurableDirectory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
| 4338 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, configurableDirectory); | ||
| 4366 | break; | 4339 | break; |
| 4367 | default: | 4340 | case "Description": |
| 4368 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installDefaultValue, "followParent", "local", "source")); | 4341 | description = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4369 | break; | 4342 | break; |
| 4370 | } | 4343 | case "Display": |
| 4371 | break; | 4344 | displayValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4372 | case "Level": | ||
| 4373 | level = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 4374 | break; | ||
| 4375 | case "Title": | ||
| 4376 | title = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4377 | if ("PUT-FEATURE-TITLE-HERE" == title) | ||
| 4378 | { | ||
| 4379 | this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, title)); | ||
| 4380 | } | ||
| 4381 | break; | ||
| 4382 | case "TypicalDefault": | ||
| 4383 | var typicalValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4384 | switch (typicalValue) | ||
| 4385 | { | ||
| 4386 | case "advertise": | ||
| 4387 | //bits |= MsiInterop.MsidbFeatureAttributesFavorAdvertise; | ||
| 4388 | typicalDefault = FeatureTypicalDefault.Advertise; | ||
| 4389 | break; | 4345 | break; |
| 4390 | case "install": // this is the default | 4346 | case "InstallDefault": |
| 4391 | typicalDefault = FeatureTypicalDefault.Install; | 4347 | var installDefaultValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4348 | switch (installDefaultValue) | ||
| 4349 | { | ||
| 4350 | case "followParent": | ||
| 4351 | if (ComplexReferenceParentType.Product == parentType) | ||
| 4352 | { | ||
| 4353 | this.Core.Write(ErrorMessages.RootFeatureCannotFollowParent(sourceLineNumbers)); | ||
| 4354 | } | ||
| 4355 | //bits = bits | MsiInterop.MsidbFeatureAttributesFollowParent; | ||
| 4356 | installDefault = FeatureInstallDefault.FollowParent; | ||
| 4357 | break; | ||
| 4358 | case "local": // this is the default | ||
| 4359 | installDefault = FeatureInstallDefault.Local; | ||
| 4360 | break; | ||
| 4361 | case "source": | ||
| 4362 | //bits = bits | MsiInterop.MsidbFeatureAttributesFavorSource; | ||
| 4363 | installDefault = FeatureInstallDefault.Source; | ||
| 4364 | break; | ||
| 4365 | case "": | ||
| 4366 | break; | ||
| 4367 | default: | ||
| 4368 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installDefaultValue, "followParent", "local", "source")); | ||
| 4369 | break; | ||
| 4370 | } | ||
| 4371 | break; | ||
| 4372 | case "Level": | ||
| 4373 | level = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 4374 | break; | ||
| 4375 | case "Title": | ||
| 4376 | title = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4377 | if ("PUT-FEATURE-TITLE-HERE" == title) | ||
| 4378 | { | ||
| 4379 | this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, title)); | ||
| 4380 | } | ||
| 4381 | break; | ||
| 4382 | case "TypicalDefault": | ||
| 4383 | var typicalValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4384 | switch (typicalValue) | ||
| 4385 | { | ||
| 4386 | case "advertise": | ||
| 4387 | //bits |= MsiInterop.MsidbFeatureAttributesFavorAdvertise; | ||
| 4388 | typicalDefault = FeatureTypicalDefault.Advertise; | ||
| 4389 | break; | ||
| 4390 | case "install": // this is the default | ||
| 4391 | typicalDefault = FeatureTypicalDefault.Install; | ||
| 4392 | break; | ||
| 4393 | default: | ||
| 4394 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typicalValue, "advertise", "install")); | ||
| 4395 | break; | ||
| 4396 | } | ||
| 4392 | break; | 4397 | break; |
| 4393 | default: | 4398 | default: |
| 4394 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, typicalValue, "advertise", "install")); | 4399 | this.Core.UnexpectedAttribute(node, attrib); |
| 4395 | break; | 4400 | break; |
| 4396 | } | ||
| 4397 | break; | ||
| 4398 | default: | ||
| 4399 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 4400 | break; | ||
| 4401 | } | 4401 | } |
| 4402 | } | 4402 | } |
| 4403 | else | 4403 | else |
| @@ -4433,39 +4433,39 @@ namespace WixToolset.Core | |||
| 4433 | { | 4433 | { |
| 4434 | switch (child.Name.LocalName) | 4434 | switch (child.Name.LocalName) |
| 4435 | { | 4435 | { |
| 4436 | case "ComponentGroupRef": | 4436 | case "ComponentGroupRef": |
| 4437 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.Feature, id.Id, null); | 4437 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.Feature, id.Id, null); |
| 4438 | break; | 4438 | break; |
| 4439 | case "ComponentRef": | 4439 | case "ComponentRef": |
| 4440 | this.ParseComponentRefElement(child, ComplexReferenceParentType.Feature, id.Id, null); | 4440 | this.ParseComponentRefElement(child, ComplexReferenceParentType.Feature, id.Id, null); |
| 4441 | break; | 4441 | break; |
| 4442 | case "Component": | 4442 | case "Component": |
| 4443 | this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id.Id, null, CompilerConstants.IntegerNotSet, null, null); | 4443 | this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id.Id, null, CompilerConstants.IntegerNotSet, null, null); |
| 4444 | break; | 4444 | break; |
| 4445 | case "Feature": | 4445 | case "Feature": |
| 4446 | this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id.Id, ref childDisplay); | 4446 | this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id.Id, ref childDisplay); |
| 4447 | break; | 4447 | break; |
| 4448 | case "FeatureGroupRef": | 4448 | case "FeatureGroupRef": |
| 4449 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.Feature, id.Id); | 4449 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.Feature, id.Id); |
| 4450 | break; | 4450 | break; |
| 4451 | case "FeatureRef": | 4451 | case "FeatureRef": |
| 4452 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Feature, id.Id); | 4452 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Feature, id.Id); |
| 4453 | break; | 4453 | break; |
| 4454 | case "File": | 4454 | case "File": |
| 4455 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); | 4455 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); |
| 4456 | break; | 4456 | break; |
| 4457 | case "Files": | 4457 | case "Files": |
| 4458 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); | 4458 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); |
| 4459 | break; | 4459 | break; |
| 4460 | case "Level": | 4460 | case "Level": |
| 4461 | this.ParseLevelElement(child, id.Id); | 4461 | this.ParseLevelElement(child, id.Id); |
| 4462 | break; | 4462 | break; |
| 4463 | case "MergeRef": | 4463 | case "MergeRef": |
| 4464 | this.ParseMergeRefElement(child, ComplexReferenceParentType.Feature, id.Id); | 4464 | this.ParseMergeRefElement(child, ComplexReferenceParentType.Feature, id.Id); |
| 4465 | break; | 4465 | break; |
| 4466 | default: | 4466 | default: |
| 4467 | this.Core.UnexpectedElement(node, child); | 4467 | this.Core.UnexpectedElement(node, child); |
| 4468 | break; | 4468 | break; |
| 4469 | } | 4469 | } |
| 4470 | } | 4470 | } |
| 4471 | else | 4471 | else |
| @@ -4477,31 +4477,31 @@ namespace WixToolset.Core | |||
| 4477 | int display; | 4477 | int display; |
| 4478 | switch (displayValue) | 4478 | switch (displayValue) |
| 4479 | { | 4479 | { |
| 4480 | case "collapse": | 4480 | case "collapse": |
| 4481 | lastDisplay = (lastDisplay | 1) + 1; | 4481 | lastDisplay = (lastDisplay | 1) + 1; |
| 4482 | display = lastDisplay; | 4482 | display = lastDisplay; |
| 4483 | break; | 4483 | break; |
| 4484 | case "expand": | 4484 | case "expand": |
| 4485 | lastDisplay = (lastDisplay + 1) | 1; | 4485 | lastDisplay = (lastDisplay + 1) | 1; |
| 4486 | display = lastDisplay; | 4486 | display = lastDisplay; |
| 4487 | break; | 4487 | break; |
| 4488 | case "hidden": | 4488 | case "hidden": |
| 4489 | display = 0; | 4489 | display = 0; |
| 4490 | break; | 4490 | break; |
| 4491 | default: | 4491 | default: |
| 4492 | if (!Int32.TryParse(displayValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out display)) | 4492 | if (!Int32.TryParse(displayValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out display)) |
| 4493 | { | ||
| 4494 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Display", displayValue, "collapse", "expand", "hidden")); | ||
| 4495 | } | ||
| 4496 | else | ||
| 4497 | { | ||
| 4498 | // Save the display value (if its not hidden) for subsequent rows | ||
| 4499 | if (0 != display) | ||
| 4500 | { | 4493 | { |
| 4501 | lastDisplay = display; | 4494 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Display", displayValue, "collapse", "expand", "hidden")); |
| 4502 | } | 4495 | } |
| 4503 | } | 4496 | else |
| 4504 | break; | 4497 | { |
| 4498 | // Save the display value (if its not hidden) for subsequent rows | ||
| 4499 | if (0 != display) | ||
| 4500 | { | ||
| 4501 | lastDisplay = display; | ||
| 4502 | } | ||
| 4503 | } | ||
| 4504 | break; | ||
| 4505 | } | 4505 | } |
| 4506 | 4506 | ||
| 4507 | if (!this.Core.EncounteredError) | 4507 | if (!this.Core.EncounteredError) |
| @@ -4545,16 +4545,16 @@ namespace WixToolset.Core | |||
| 4545 | { | 4545 | { |
| 4546 | switch (attrib.Name.LocalName) | 4546 | switch (attrib.Name.LocalName) |
| 4547 | { | 4547 | { |
| 4548 | case "Id": | 4548 | case "Id": |
| 4549 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 4549 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 4550 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, id); | 4550 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, id); |
| 4551 | break; | 4551 | break; |
| 4552 | case "IgnoreParent": | 4552 | case "IgnoreParent": |
| 4553 | ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 4553 | ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4554 | break; | 4554 | break; |
| 4555 | default: | 4555 | default: |
| 4556 | this.Core.UnexpectedAttribute(node, attrib); | 4556 | this.Core.UnexpectedAttribute(node, attrib); |
| 4557 | break; | 4557 | break; |
| 4558 | } | 4558 | } |
| 4559 | } | 4559 | } |
| 4560 | else | 4560 | else |
| @@ -4576,39 +4576,39 @@ namespace WixToolset.Core | |||
| 4576 | { | 4576 | { |
| 4577 | switch (child.Name.LocalName) | 4577 | switch (child.Name.LocalName) |
| 4578 | { | 4578 | { |
| 4579 | case "ComponentGroupRef": | 4579 | case "ComponentGroupRef": |
| 4580 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.Feature, id, null); | 4580 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.Feature, id, null); |
| 4581 | break; | 4581 | break; |
| 4582 | case "ComponentRef": | 4582 | case "ComponentRef": |
| 4583 | this.ParseComponentRefElement(child, ComplexReferenceParentType.Feature, id, null); | 4583 | this.ParseComponentRefElement(child, ComplexReferenceParentType.Feature, id, null); |
| 4584 | break; | 4584 | break; |
| 4585 | case "Component": | 4585 | case "Component": |
| 4586 | this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id, null, CompilerConstants.IntegerNotSet, null, null); | 4586 | this.ParseComponentElement(child, ComplexReferenceParentType.Feature, id, null, CompilerConstants.IntegerNotSet, null, null); |
| 4587 | break; | 4587 | break; |
| 4588 | case "Feature": | 4588 | case "Feature": |
| 4589 | this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id, ref lastDisplay); | 4589 | this.ParseFeatureElement(child, ComplexReferenceParentType.Feature, id, ref lastDisplay); |
| 4590 | break; | 4590 | break; |
| 4591 | case "FeatureGroup": | 4591 | case "FeatureGroup": |
| 4592 | this.ParseFeatureGroupElement(child, ComplexReferenceParentType.Feature, id); | 4592 | this.ParseFeatureGroupElement(child, ComplexReferenceParentType.Feature, id); |
| 4593 | break; | 4593 | break; |
| 4594 | case "FeatureGroupRef": | 4594 | case "FeatureGroupRef": |
| 4595 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.Feature, id); | 4595 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.Feature, id); |
| 4596 | break; | 4596 | break; |
| 4597 | case "FeatureRef": | 4597 | case "FeatureRef": |
| 4598 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Feature, id); | 4598 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Feature, id); |
| 4599 | break; | 4599 | break; |
| 4600 | case "File": | 4600 | case "File": |
| 4601 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Feature, id, null, null); | 4601 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Feature, id, null, null); |
| 4602 | break; | 4602 | break; |
| 4603 | case "Files": | 4603 | case "Files": |
| 4604 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id, null, null); | 4604 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id, null, null); |
| 4605 | break; | 4605 | break; |
| 4606 | case "MergeRef": | 4606 | case "MergeRef": |
| 4607 | this.ParseMergeRefElement(child, ComplexReferenceParentType.Feature, id); | 4607 | this.ParseMergeRefElement(child, ComplexReferenceParentType.Feature, id); |
| 4608 | break; | 4608 | break; |
| 4609 | default: | 4609 | default: |
| 4610 | this.Core.UnexpectedElement(node, child); | 4610 | this.Core.UnexpectedElement(node, child); |
| 4611 | break; | 4611 | break; |
| 4612 | } | 4612 | } |
| 4613 | } | 4613 | } |
| 4614 | else | 4614 | else |
| @@ -4643,12 +4643,12 @@ namespace WixToolset.Core | |||
| 4643 | { | 4643 | { |
| 4644 | switch (attrib.Name.LocalName) | 4644 | switch (attrib.Name.LocalName) |
| 4645 | { | 4645 | { |
| 4646 | case "Id": | 4646 | case "Id": |
| 4647 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4647 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4648 | break; | 4648 | break; |
| 4649 | default: | 4649 | default: |
| 4650 | this.Core.UnexpectedAttribute(node, attrib); | 4650 | this.Core.UnexpectedAttribute(node, attrib); |
| 4651 | break; | 4651 | break; |
| 4652 | } | 4652 | } |
| 4653 | } | 4653 | } |
| 4654 | else | 4654 | else |
| @@ -4670,36 +4670,36 @@ namespace WixToolset.Core | |||
| 4670 | { | 4670 | { |
| 4671 | switch (child.Name.LocalName) | 4671 | switch (child.Name.LocalName) |
| 4672 | { | 4672 | { |
| 4673 | case "ComponentGroupRef": | 4673 | case "ComponentGroupRef": |
| 4674 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null); | 4674 | this.ParseComponentGroupRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null); |
| 4675 | break; | 4675 | break; |
| 4676 | case "ComponentRef": | 4676 | case "ComponentRef": |
| 4677 | this.ParseComponentRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null); | 4677 | this.ParseComponentRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null); |
| 4678 | break; | 4678 | break; |
| 4679 | case "Component": | 4679 | case "Component": |
| 4680 | this.ParseComponentElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null, CompilerConstants.IntegerNotSet, null, null); | 4680 | this.ParseComponentElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null, CompilerConstants.IntegerNotSet, null, null); |
| 4681 | break; | 4681 | break; |
| 4682 | case "Feature": | 4682 | case "Feature": |
| 4683 | this.ParseFeatureElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, ref lastDisplay); | 4683 | this.ParseFeatureElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, ref lastDisplay); |
| 4684 | break; | 4684 | break; |
| 4685 | case "FeatureGroupRef": | 4685 | case "FeatureGroupRef": |
| 4686 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); | 4686 | this.ParseFeatureGroupRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); |
| 4687 | break; | 4687 | break; |
| 4688 | case "FeatureRef": | 4688 | case "FeatureRef": |
| 4689 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); | 4689 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); |
| 4690 | break; | 4690 | break; |
| 4691 | case "File": | 4691 | case "File": |
| 4692 | this.ParseNakedFileElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null, null); | 4692 | this.ParseNakedFileElement(child, ComplexReferenceParentType.FeatureGroup, id.Id, null, null); |
| 4693 | break; | 4693 | break; |
| 4694 | case "Files": | 4694 | case "Files": |
| 4695 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); | 4695 | this.ParseFilesElement(child, ComplexReferenceParentType.Feature, id.Id, null, null); |
| 4696 | break; | 4696 | break; |
| 4697 | case "MergeRef": | 4697 | case "MergeRef": |
| 4698 | this.ParseMergeRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); | 4698 | this.ParseMergeRefElement(child, ComplexReferenceParentType.FeatureGroup, id.Id); |
| 4699 | break; | 4699 | break; |
| 4700 | default: | 4700 | default: |
| 4701 | this.Core.UnexpectedElement(node, child); | 4701 | this.Core.UnexpectedElement(node, child); |
| 4702 | break; | 4702 | break; |
| 4703 | } | 4703 | } |
| 4704 | } | 4704 | } |
| 4705 | else | 4705 | else |
| @@ -4738,19 +4738,19 @@ namespace WixToolset.Core | |||
| 4738 | { | 4738 | { |
| 4739 | switch (attrib.Name.LocalName) | 4739 | switch (attrib.Name.LocalName) |
| 4740 | { | 4740 | { |
| 4741 | case "Id": | 4741 | case "Id": |
| 4742 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 4742 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4743 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixFeatureGroup, id); | 4743 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixFeatureGroup, id); |
| 4744 | break; | 4744 | break; |
| 4745 | case "IgnoreParent": | 4745 | case "IgnoreParent": |
| 4746 | ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 4746 | ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4747 | break; | 4747 | break; |
| 4748 | case "Primary": | 4748 | case "Primary": |
| 4749 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 4749 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4750 | break; | 4750 | break; |
| 4751 | default: | 4751 | default: |
| 4752 | this.Core.UnexpectedAttribute(node, attrib); | 4752 | this.Core.UnexpectedAttribute(node, attrib); |
| 4753 | break; | 4753 | break; |
| 4754 | } | 4754 | } |
| 4755 | } | 4755 | } |
| 4756 | else | 4756 | else |
| @@ -4798,65 +4798,65 @@ namespace WixToolset.Core | |||
| 4798 | { | 4798 | { |
| 4799 | switch (attrib.Name.LocalName) | 4799 | switch (attrib.Name.LocalName) |
| 4800 | { | 4800 | { |
| 4801 | case "Id": | 4801 | case "Id": |
| 4802 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 4802 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 4803 | break; | ||
| 4804 | case "Action": | ||
| 4805 | var actionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4806 | switch (actionValue) | ||
| 4807 | { | ||
| 4808 | case "create": | ||
| 4809 | action = EnvironmentActionType.Create; | ||
| 4810 | break; | 4803 | break; |
| 4811 | case "set": | 4804 | case "Action": |
| 4812 | action = EnvironmentActionType.Set; | 4805 | var actionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4806 | switch (actionValue) | ||
| 4807 | { | ||
| 4808 | case "create": | ||
| 4809 | action = EnvironmentActionType.Create; | ||
| 4810 | break; | ||
| 4811 | case "set": | ||
| 4812 | action = EnvironmentActionType.Set; | ||
| 4813 | break; | ||
| 4814 | case "remove": | ||
| 4815 | action = EnvironmentActionType.Remove; | ||
| 4816 | break; | ||
| 4817 | default: | ||
| 4818 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "create", "set", "remove")); | ||
| 4819 | break; | ||
| 4820 | } | ||
| 4813 | break; | 4821 | break; |
| 4814 | case "remove": | 4822 | case "Name": |
| 4815 | action = EnvironmentActionType.Remove; | 4823 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4816 | break; | 4824 | break; |
| 4817 | default: | 4825 | case "Part": |
| 4818 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, value, "create", "set", "remove")); | 4826 | var partValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4827 | switch (partValue) | ||
| 4828 | { | ||
| 4829 | case "all": | ||
| 4830 | part = EnvironmentPartType.All; | ||
| 4831 | break; | ||
| 4832 | case "first": | ||
| 4833 | part = EnvironmentPartType.First; | ||
| 4834 | break; | ||
| 4835 | case "last": | ||
| 4836 | part = EnvironmentPartType.Last; | ||
| 4837 | break; | ||
| 4838 | case "": | ||
| 4839 | break; | ||
| 4840 | default: | ||
| 4841 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Part", partValue, "all", "first", "last")); | ||
| 4842 | break; | ||
| 4843 | } | ||
| 4819 | break; | 4844 | break; |
| 4820 | } | 4845 | case "Permanent": |
| 4821 | break; | 4846 | permanent = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4822 | case "Name": | ||
| 4823 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4824 | break; | ||
| 4825 | case "Part": | ||
| 4826 | var partValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4827 | switch (partValue) | ||
| 4828 | { | ||
| 4829 | case "all": | ||
| 4830 | part = EnvironmentPartType.All; | ||
| 4831 | break; | 4847 | break; |
| 4832 | case "first": | 4848 | case "Separator": |
| 4833 | part = EnvironmentPartType.First; | 4849 | separator = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4834 | break; | 4850 | break; |
| 4835 | case "last": | 4851 | case "System": |
| 4836 | part = EnvironmentPartType.Last; | 4852 | system = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 4837 | break; | 4853 | break; |
| 4838 | case "": | 4854 | case "Value": |
| 4855 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4839 | break; | 4856 | break; |
| 4840 | default: | 4857 | default: |
| 4841 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Part", partValue, "all", "first", "last")); | 4858 | this.Core.UnexpectedAttribute(node, attrib); |
| 4842 | break; | 4859 | break; |
| 4843 | } | ||
| 4844 | break; | ||
| 4845 | case "Permanent": | ||
| 4846 | permanent = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 4847 | break; | ||
| 4848 | case "Separator": | ||
| 4849 | separator = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4850 | break; | ||
| 4851 | case "System": | ||
| 4852 | system = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 4853 | break; | ||
| 4854 | case "Value": | ||
| 4855 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 4856 | break; | ||
| 4857 | default: | ||
| 4858 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 4859 | break; | ||
| 4860 | } | 4860 | } |
| 4861 | } | 4861 | } |
| 4862 | else | 4862 | else |
| @@ -4939,15 +4939,15 @@ namespace WixToolset.Core | |||
| 4939 | { | 4939 | { |
| 4940 | switch (attrib.Name.LocalName) | 4940 | switch (attrib.Name.LocalName) |
| 4941 | { | 4941 | { |
| 4942 | case "Id": | 4942 | case "Id": |
| 4943 | id = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | 4943 | id = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); |
| 4944 | break; | 4944 | break; |
| 4945 | case "Message": | 4945 | case "Message": |
| 4946 | message = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); | 4946 | message = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); |
| 4947 | break; | 4947 | break; |
| 4948 | default: | 4948 | default: |
| 4949 | this.Core.UnexpectedAttribute(node, attrib); | 4949 | this.Core.UnexpectedAttribute(node, attrib); |
| 4950 | break; | 4950 | break; |
| 4951 | } | 4951 | } |
| 4952 | } | 4952 | } |
| 4953 | else | 4953 | else |
| @@ -4992,23 +4992,23 @@ namespace WixToolset.Core | |||
| 4992 | { | 4992 | { |
| 4993 | switch (attrib.Name.LocalName) | 4993 | switch (attrib.Name.LocalName) |
| 4994 | { | 4994 | { |
| 4995 | case "Id": | 4995 | case "Id": |
| 4996 | extension = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 4996 | extension = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 4997 | break; | 4997 | break; |
| 4998 | case "Advertise": | 4998 | case "Advertise": |
| 4999 | var extensionAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 4999 | var extensionAdvertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 5000 | if ((YesNoType.No == advertise && YesNoType.Yes == extensionAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == extensionAdvertise)) | 5000 | if ((YesNoType.No == advertise && YesNoType.Yes == extensionAdvertise) || (YesNoType.Yes == advertise && YesNoType.No == extensionAdvertise)) |
| 5001 | { | 5001 | { |
| 5002 | this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, extensionAdvertise.ToString(), advertise.ToString())); | 5002 | this.Core.Write(ErrorMessages.AdvertiseStateMustMatch(sourceLineNumbers, extensionAdvertise.ToString(), advertise.ToString())); |
| 5003 | } | 5003 | } |
| 5004 | advertise = extensionAdvertise; | 5004 | advertise = extensionAdvertise; |
| 5005 | break; | 5005 | break; |
| 5006 | case "ContentType": | 5006 | case "ContentType": |
| 5007 | mime = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5007 | mime = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5008 | break; | 5008 | break; |
| 5009 | default: | 5009 | default: |
| 5010 | this.Core.UnexpectedAttribute(node, attrib); | 5010 | this.Core.UnexpectedAttribute(node, attrib); |
| 5011 | break; | 5011 | break; |
| 5012 | } | 5012 | } |
| 5013 | } | 5013 | } |
| 5014 | else | 5014 | else |
| @@ -5029,19 +5029,19 @@ namespace WixToolset.Core | |||
| 5029 | { | 5029 | { |
| 5030 | switch (child.Name.LocalName) | 5030 | switch (child.Name.LocalName) |
| 5031 | { | 5031 | { |
| 5032 | case "Verb": | 5032 | case "Verb": |
| 5033 | this.ParseVerbElement(child, extension, progId, componentId, advertise); | 5033 | this.ParseVerbElement(child, extension, progId, componentId, advertise); |
| 5034 | break; | 5034 | break; |
| 5035 | case "MIME": | 5035 | case "MIME": |
| 5036 | var newMime = this.ParseMIMEElement(child, extension, componentId, advertise); | 5036 | var newMime = this.ParseMIMEElement(child, extension, componentId, advertise); |
| 5037 | if (null != newMime && null == mime) | 5037 | if (null != newMime && null == mime) |
| 5038 | { | 5038 | { |
| 5039 | mime = newMime; | 5039 | mime = newMime; |
| 5040 | } | 5040 | } |
| 5041 | break; | 5041 | break; |
| 5042 | default: | 5042 | default: |
| 5043 | this.Core.UnexpectedElement(node, child); | 5043 | this.Core.UnexpectedElement(node, child); |
| 5044 | break; | 5044 | break; |
| 5045 | } | 5045 | } |
| 5046 | } | 5046 | } |
| 5047 | else | 5047 | else |
| @@ -5207,175 +5207,175 @@ namespace WixToolset.Core | |||
| 5207 | { | 5207 | { |
| 5208 | switch (attrib.Name.LocalName) | 5208 | switch (attrib.Name.LocalName) |
| 5209 | { | 5209 | { |
| 5210 | case "Id": | 5210 | case "Id": |
| 5211 | case "Name": | 5211 | case "Name": |
| 5212 | case "ShortName": | 5212 | case "ShortName": |
| 5213 | case "Source": | 5213 | case "Source": |
| 5214 | // Handled in ParseFileNamingAttributes | 5214 | // Handled in ParseFileNamingAttributes |
| 5215 | break; | 5215 | break; |
| 5216 | 5216 | ||
| 5217 | case "Bitness": | 5217 | case "Bitness": |
| 5218 | case "Condition": | 5218 | case "Condition": |
| 5219 | case "Directory": | 5219 | case "Directory": |
| 5220 | case "Subdirectory": | 5220 | case "Subdirectory": |
| 5221 | // Naked files handle their attributes in ParseNakedFileElement. | 5221 | // Naked files handle their attributes in ParseNakedFileElement. |
| 5222 | if (!isNakedFile) | 5222 | if (!isNakedFile) |
| 5223 | { | 5223 | { |
| 5224 | this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, attrib.Name.LocalName)); | 5224 | this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, attrib.Name.LocalName)); |
| 5225 | } | 5225 | } |
| 5226 | break; | ||
| 5227 | case "Assembly": | ||
| 5228 | var assemblyValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 5229 | switch (assemblyValue) | ||
| 5230 | { | ||
| 5231 | case ".net": | ||
| 5232 | assemblyType = AssemblyType.DotNetAssembly; | ||
| 5233 | break; | 5226 | break; |
| 5234 | case "no": | 5227 | case "Assembly": |
| 5235 | assemblyType = AssemblyType.NotAnAssembly; | 5228 | var assemblyValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5229 | switch (assemblyValue) | ||
| 5230 | { | ||
| 5231 | case ".net": | ||
| 5232 | assemblyType = AssemblyType.DotNetAssembly; | ||
| 5233 | break; | ||
| 5234 | case "no": | ||
| 5235 | assemblyType = AssemblyType.NotAnAssembly; | ||
| 5236 | break; | ||
| 5237 | case "win32": | ||
| 5238 | assemblyType = AssemblyType.Win32Assembly; | ||
| 5239 | break; | ||
| 5240 | default: | ||
| 5241 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "Assembly", assemblyValue, "no", "win32", ".net")); | ||
| 5242 | break; | ||
| 5243 | } | ||
| 5236 | break; | 5244 | break; |
| 5237 | case "win32": | 5245 | case "AssemblyApplication": |
| 5238 | assemblyType = AssemblyType.Win32Assembly; | 5246 | assemblyApplication = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 5247 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyApplication); | ||
| 5239 | break; | 5248 | break; |
| 5240 | default: | 5249 | case "AssemblyManifest": |
| 5241 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "Assembly", assemblyValue, "no", "win32", ".net")); | 5250 | assemblyManifest = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 5251 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyManifest); | ||
| 5242 | break; | 5252 | break; |
| 5243 | } | 5253 | case "BindPath": |
| 5244 | break; | 5254 | bindPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); |
| 5245 | case "AssemblyApplication": | 5255 | break; |
| 5246 | assemblyApplication = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 5256 | case "Checksum": |
| 5247 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyApplication); | 5257 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 5248 | break; | 5258 | { |
| 5249 | case "AssemblyManifest": | 5259 | checksum = true; |
| 5250 | assemblyManifest = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 5260 | //bits |= MsiInterop.MsidbFileAttributesChecksum; |
| 5251 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyManifest); | 5261 | } |
| 5252 | break; | 5262 | break; |
| 5253 | case "BindPath": | 5263 | case "CompanionFile": |
| 5254 | bindPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); | 5264 | companionFile = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 5255 | break; | 5265 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, companionFile); |
| 5256 | case "Checksum": | 5266 | break; |
| 5257 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | 5267 | case "Compressed": |
| 5258 | { | 5268 | var compressedValue = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); |
| 5259 | checksum = true; | 5269 | if (YesNoDefaultType.Yes == compressedValue) |
| 5260 | //bits |= MsiInterop.MsidbFileAttributesChecksum; | 5270 | { |
| 5261 | } | 5271 | compressed = true; |
| 5262 | break; | 5272 | //bits |= MsiInterop.MsidbFileAttributesCompressed; |
| 5263 | case "CompanionFile": | 5273 | } |
| 5264 | companionFile = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 5274 | else if (YesNoDefaultType.No == compressedValue) |
| 5265 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, companionFile); | 5275 | { |
| 5266 | break; | 5276 | compressed = false; |
| 5267 | case "Compressed": | 5277 | //bits |= MsiInterop.MsidbFileAttributesNoncompressed; |
| 5268 | var compressedValue = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); | 5278 | } |
| 5269 | if (YesNoDefaultType.Yes == compressedValue) | 5279 | break; |
| 5270 | { | 5280 | case "DefaultLanguage": |
| 5271 | compressed = true; | 5281 | defaultLanguage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5272 | //bits |= MsiInterop.MsidbFileAttributesCompressed; | 5282 | break; |
| 5273 | } | 5283 | case "DefaultSize": |
| 5274 | else if (YesNoDefaultType.No == compressedValue) | 5284 | defaultSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); |
| 5275 | { | 5285 | break; |
| 5276 | compressed = false; | 5286 | case "DefaultVersion": |
| 5277 | //bits |= MsiInterop.MsidbFileAttributesNoncompressed; | 5287 | defaultVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5278 | } | 5288 | break; |
| 5279 | break; | 5289 | case "DiskId": |
| 5280 | case "DefaultLanguage": | 5290 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 5281 | defaultLanguage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5291 | break; |
| 5282 | break; | 5292 | case "FontTitle": |
| 5283 | case "DefaultSize": | 5293 | fontTitle = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5284 | defaultSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); | 5294 | break; |
| 5285 | break; | 5295 | case "Hidden": |
| 5286 | case "DefaultVersion": | 5296 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 5287 | defaultVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5297 | { |
| 5288 | break; | 5298 | hidden = true; |
| 5289 | case "DiskId": | 5299 | //bits |= MsiInterop.MsidbFileAttributesHidden; |
| 5290 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 5300 | } |
| 5291 | break; | 5301 | break; |
| 5292 | case "FontTitle": | 5302 | case "KeyPath": |
| 5293 | fontTitle = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5303 | keyPath = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 5294 | break; | ||
| 5295 | case "Hidden": | ||
| 5296 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5297 | { | ||
| 5298 | hidden = true; | ||
| 5299 | //bits |= MsiInterop.MsidbFileAttributesHidden; | ||
| 5300 | } | ||
| 5301 | break; | ||
| 5302 | case "KeyPath": | ||
| 5303 | keyPath = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5304 | break; | ||
| 5305 | case "PatchGroup": | ||
| 5306 | patchGroup = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int32.MaxValue); | ||
| 5307 | break; | ||
| 5308 | case "PatchIgnore": | ||
| 5309 | patchIgnore = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5310 | break; | ||
| 5311 | case "PatchWholeFile": | ||
| 5312 | patchIncludeWholeFile = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5313 | break; | ||
| 5314 | case "PatchAllowIgnoreOnError": | ||
| 5315 | patchAllowIgnoreOnError = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5316 | break; | ||
| 5317 | case "ProcessorArchitecture": | ||
| 5318 | var procArchValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 5319 | switch (procArchValue) | ||
| 5320 | { | ||
| 5321 | case "msil": | ||
| 5322 | procArch = "MSIL"; | ||
| 5323 | break; | 5304 | break; |
| 5324 | case "x86": | 5305 | case "PatchGroup": |
| 5325 | procArch = "x86"; | 5306 | patchGroup = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int32.MaxValue); |
| 5326 | break; | 5307 | break; |
| 5327 | case "x64": | 5308 | case "PatchIgnore": |
| 5328 | procArch = "amd64"; | 5309 | patchIgnore = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 5329 | break; | 5310 | break; |
| 5330 | case "arm64": | 5311 | case "PatchWholeFile": |
| 5331 | procArch = "arm64"; | 5312 | patchIncludeWholeFile = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 5332 | break; | 5313 | break; |
| 5333 | case "": | 5314 | case "PatchAllowIgnoreOnError": |
| 5315 | patchAllowIgnoreOnError = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5316 | break; | ||
| 5317 | case "ProcessorArchitecture": | ||
| 5318 | var procArchValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 5319 | switch (procArchValue) | ||
| 5320 | { | ||
| 5321 | case "msil": | ||
| 5322 | procArch = "MSIL"; | ||
| 5323 | break; | ||
| 5324 | case "x86": | ||
| 5325 | procArch = "x86"; | ||
| 5326 | break; | ||
| 5327 | case "x64": | ||
| 5328 | procArch = "amd64"; | ||
| 5329 | break; | ||
| 5330 | case "arm64": | ||
| 5331 | procArch = "arm64"; | ||
| 5332 | break; | ||
| 5333 | case "": | ||
| 5334 | break; | ||
| 5335 | default: | ||
| 5336 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "ProcessorArchitecture", procArchValue, "msil", "x86", "x64")); | ||
| 5337 | break; | ||
| 5338 | } | ||
| 5339 | break; | ||
| 5340 | case "ReadOnly": | ||
| 5341 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5342 | { | ||
| 5343 | readOnly = true; | ||
| 5344 | //bits |= MsiInterop.MsidbFileAttributesReadOnly; | ||
| 5345 | } | ||
| 5346 | break; | ||
| 5347 | case "SelfRegCost": | ||
| 5348 | selfRegCost = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 5349 | break; | ||
| 5350 | case "System": | ||
| 5351 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5352 | { | ||
| 5353 | system = true; | ||
| 5354 | //bits |= MsiInterop.MsidbFileAttributesSystem; | ||
| 5355 | } | ||
| 5356 | break; | ||
| 5357 | case "TrueType": | ||
| 5358 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5359 | { | ||
| 5360 | fontTitle = String.Empty; | ||
| 5361 | } | ||
| 5362 | break; | ||
| 5363 | case "Vital": | ||
| 5364 | var isVital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5365 | if (YesNoType.Yes == isVital) | ||
| 5366 | { | ||
| 5367 | vital = true; | ||
| 5368 | //bits |= MsiInterop.MsidbFileAttributesVital; | ||
| 5369 | } | ||
| 5370 | else if (YesNoType.No == isVital) | ||
| 5371 | { | ||
| 5372 | vital = false; | ||
| 5373 | //bits &= ~MsiInterop.MsidbFileAttributesVital; | ||
| 5374 | } | ||
| 5334 | break; | 5375 | break; |
| 5335 | default: | 5376 | default: |
| 5336 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, "File", "ProcessorArchitecture", procArchValue, "msil", "x86", "x64")); | 5377 | this.Core.UnexpectedAttribute(node, attrib); |
| 5337 | break; | 5378 | break; |
| 5338 | } | ||
| 5339 | break; | ||
| 5340 | case "ReadOnly": | ||
| 5341 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5342 | { | ||
| 5343 | readOnly = true; | ||
| 5344 | //bits |= MsiInterop.MsidbFileAttributesReadOnly; | ||
| 5345 | } | ||
| 5346 | break; | ||
| 5347 | case "SelfRegCost": | ||
| 5348 | selfRegCost = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 5349 | break; | ||
| 5350 | case "System": | ||
| 5351 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5352 | { | ||
| 5353 | system = true; | ||
| 5354 | //bits |= MsiInterop.MsidbFileAttributesSystem; | ||
| 5355 | } | ||
| 5356 | break; | ||
| 5357 | case "TrueType": | ||
| 5358 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 5359 | { | ||
| 5360 | fontTitle = String.Empty; | ||
| 5361 | } | ||
| 5362 | break; | ||
| 5363 | case "Vital": | ||
| 5364 | var isVital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | ||
| 5365 | if (YesNoType.Yes == isVital) | ||
| 5366 | { | ||
| 5367 | vital = true; | ||
| 5368 | //bits |= MsiInterop.MsidbFileAttributesVital; | ||
| 5369 | } | ||
| 5370 | else if (YesNoType.No == isVital) | ||
| 5371 | { | ||
| 5372 | vital = false; | ||
| 5373 | //bits &= ~MsiInterop.MsidbFileAttributesVital; | ||
| 5374 | } | ||
| 5375 | break; | ||
| 5376 | default: | ||
| 5377 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 5378 | break; | ||
| 5379 | } | 5379 | } |
| 5380 | } | 5380 | } |
| 5381 | else | 5381 | else |
| @@ -5528,55 +5528,55 @@ namespace WixToolset.Core | |||
| 5528 | { | 5528 | { |
| 5529 | switch (child.Name.LocalName) | 5529 | switch (child.Name.LocalName) |
| 5530 | { | 5530 | { |
| 5531 | case "AppId": | 5531 | case "AppId": |
| 5532 | this.ParseAppIdElement(child, componentId, YesNoType.NotSet, id.Id, null, null); | 5532 | this.ParseAppIdElement(child, componentId, YesNoType.NotSet, id.Id, null, null); |
| 5533 | break; | 5533 | break; |
| 5534 | case "AssemblyName": | 5534 | case "AssemblyName": |
| 5535 | this.ParseAssemblyName(child, componentId); | 5535 | this.ParseAssemblyName(child, componentId); |
| 5536 | break; | 5536 | break; |
| 5537 | case "Class": | 5537 | case "Class": |
| 5538 | this.ParseClassElement(child, componentId, YesNoType.NotSet, id.Id, null, null, null); | 5538 | this.ParseClassElement(child, componentId, YesNoType.NotSet, id.Id, null, null, null); |
| 5539 | break; | 5539 | break; |
| 5540 | case "CopyFile": | 5540 | case "CopyFile": |
| 5541 | this.ParseCopyFileElement(child, componentId, id.Id); | 5541 | this.ParseCopyFileElement(child, componentId, id.Id); |
| 5542 | break; | 5542 | break; |
| 5543 | case "IgnoreRange": | 5543 | case "IgnoreRange": |
| 5544 | this.ParseRangeElement(child, ref ignoreOffsets, ref ignoreLengths); | 5544 | this.ParseRangeElement(child, ref ignoreOffsets, ref ignoreLengths); |
| 5545 | break; | 5545 | break; |
| 5546 | case "ODBCDriver": | 5546 | case "ODBCDriver": |
| 5547 | this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCDriver); | 5547 | this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCDriver); |
| 5548 | break; | 5548 | break; |
| 5549 | case "ODBCTranslator": | 5549 | case "ODBCTranslator": |
| 5550 | this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCTranslator); | 5550 | this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCTranslator); |
| 5551 | break; | 5551 | break; |
| 5552 | case "Permission": | 5552 | case "Permission": |
| 5553 | this.ParsePermissionElement(child, id.Id, "File"); | 5553 | this.ParsePermissionElement(child, id.Id, "File"); |
| 5554 | break; | 5554 | break; |
| 5555 | case "PermissionEx": | 5555 | case "PermissionEx": |
| 5556 | this.ParsePermissionExElement(child, id.Id, "File"); | 5556 | this.ParsePermissionExElement(child, id.Id, "File"); |
| 5557 | break; | 5557 | break; |
| 5558 | case "ProtectRange": | 5558 | case "ProtectRange": |
| 5559 | this.ParseRangeElement(child, ref protectOffsets, ref protectLengths); | 5559 | this.ParseRangeElement(child, ref protectOffsets, ref protectLengths); |
| 5560 | break; | 5560 | break; |
| 5561 | case "Shortcut": | 5561 | case "Shortcut": |
| 5562 | this.ParseShortcutElement(child, componentId, node.Name.LocalName, id.Id, keyPath); | 5562 | this.ParseShortcutElement(child, componentId, node.Name.LocalName, id.Id, keyPath); |
| 5563 | break; | 5563 | break; |
| 5564 | case "SymbolPath": | 5564 | case "SymbolPath": |
| 5565 | if (null != symbols) | 5565 | if (null != symbols) |
| 5566 | { | 5566 | { |
| 5567 | symbols += ";" + this.ParseSymbolPathElement(child); | 5567 | symbols += ";" + this.ParseSymbolPathElement(child); |
| 5568 | } | 5568 | } |
| 5569 | else | 5569 | else |
| 5570 | { | 5570 | { |
| 5571 | symbols = this.ParseSymbolPathElement(child); | 5571 | symbols = this.ParseSymbolPathElement(child); |
| 5572 | } | 5572 | } |
| 5573 | break; | 5573 | break; |
| 5574 | case "TypeLib": | 5574 | case "TypeLib": |
| 5575 | this.ParseTypeLibElement(child, componentId, id.Id, win64Component); | 5575 | this.ParseTypeLibElement(child, componentId, id.Id, win64Component); |
| 5576 | break; | 5576 | break; |
| 5577 | default: | 5577 | default: |
| 5578 | this.Core.UnexpectedElement(node, child); | 5578 | this.Core.UnexpectedElement(node, child); |
| 5579 | break; | 5579 | break; |
| 5580 | } | 5580 | } |
| 5581 | } | 5581 | } |
| 5582 | else | 5582 | else |
| @@ -5652,34 +5652,34 @@ namespace WixToolset.Core | |||
| 5652 | { | 5652 | { |
| 5653 | switch (attrib.Name.LocalName) | 5653 | switch (attrib.Name.LocalName) |
| 5654 | { | 5654 | { |
| 5655 | case "Bitness": | 5655 | case "Bitness": |
| 5656 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5656 | var bitnessValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5657 | switch (bitnessValue) | 5657 | switch (bitnessValue) |
| 5658 | { | 5658 | { |
| 5659 | case "always32": | 5659 | case "always32": |
| 5660 | win64 = false; | 5660 | win64 = false; |
| 5661 | break; | 5661 | break; |
| 5662 | case "always64": | 5662 | case "always64": |
| 5663 | win64 = true; | 5663 | win64 = true; |
| 5664 | break; | 5664 | break; |
| 5665 | case "default": | 5665 | case "default": |
| 5666 | case "": | 5666 | case "": |
| 5667 | break; | 5667 | break; |
| 5668 | default: | 5668 | default: |
| 5669 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); | 5669 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, bitnessValue, "default", "always32", "always64")); |
| 5670 | break; | 5670 | break; |
| 5671 | } | 5671 | } |
| 5672 | break; | 5672 | break; |
| 5673 | case "Condition": | 5673 | case "Condition": |
| 5674 | condition = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5674 | condition = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5675 | break; | 5675 | break; |
| 5676 | case "Directory": | 5676 | case "Directory": |
| 5677 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 5677 | directoryId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 5678 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); | 5678 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, directoryId); |
| 5679 | break; | 5679 | break; |
| 5680 | case "Subdirectory": | 5680 | case "Subdirectory": |
| 5681 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); | 5681 | subdirectory = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true); |
| 5682 | break; | 5682 | break; |
| 5683 | } | 5683 | } |
| 5684 | } | 5684 | } |
| 5685 | } | 5685 | } |
| @@ -5700,42 +5700,45 @@ namespace WixToolset.Core | |||
| 5700 | 5700 | ||
| 5701 | this.ParseFileElementOtherAttributes(node, id.Id, directoryId, diskId: CompilerConstants.IntegerNotSet, id, name, shortName, source, out var _, componentGuid: "*", isNakedFile: true, fileSymbol: out var fileSymbol, assemblySymbol: out var assemblySymbol); | 5701 | this.ParseFileElementOtherAttributes(node, id.Id, directoryId, diskId: CompilerConstants.IntegerNotSet, id, name, shortName, source, out var _, componentGuid: "*", isNakedFile: true, fileSymbol: out var fileSymbol, assemblySymbol: out var assemblySymbol); |
| 5702 | 5702 | ||
| 5703 | this.Core.AddSymbol(fileSymbol); | 5703 | if (!this.Core.EncounteredError) |
| 5704 | |||
| 5705 | this.Core.AddSymbol(new ComponentSymbol(sourceLineNumbers, id) | ||
| 5706 | { | 5704 | { |
| 5707 | ComponentId = "*", | 5705 | this.Core.AddSymbol(fileSymbol); |
| 5708 | DirectoryRef = directoryId, | 5706 | |
| 5709 | Location = ComponentLocation.LocalOnly, | 5707 | this.Core.AddSymbol(new ComponentSymbol(sourceLineNumbers, id) |
| 5710 | Condition = condition, | 5708 | { |
| 5711 | KeyPath = id.Id, | 5709 | ComponentId = "*", |
| 5712 | KeyPathType = ComponentKeyPathType.File, | 5710 | DirectoryRef = directoryId, |
| 5713 | DisableRegistryReflection = false, | 5711 | Location = ComponentLocation.LocalOnly, |
| 5714 | NeverOverwrite = false, | 5712 | Condition = condition, |
| 5715 | Permanent = false, | 5713 | KeyPath = id.Id, |
| 5716 | SharedDllRefCount = false, | 5714 | KeyPathType = ComponentKeyPathType.File, |
| 5717 | Shared = false, | 5715 | DisableRegistryReflection = false, |
| 5718 | Transitive = false, | 5716 | NeverOverwrite = false, |
| 5719 | UninstallWhenSuperseded = false, | 5717 | Permanent = false, |
| 5720 | Win64 = win64, | 5718 | SharedDllRefCount = false, |
| 5721 | }); | 5719 | Shared = false, |
| 5720 | Transitive = false, | ||
| 5721 | UninstallWhenSuperseded = false, | ||
| 5722 | Win64 = win64, | ||
| 5723 | }); | ||
| 5722 | 5724 | ||
| 5723 | if (assemblySymbol != null) | 5725 | if (assemblySymbol != null) |
| 5724 | { | 5726 | { |
| 5725 | this.Core.AddSymbol(assemblySymbol); | 5727 | this.Core.AddSymbol(assemblySymbol); |
| 5726 | } | 5728 | } |
| 5727 | 5729 | ||
| 5728 | this.ParseFileElementChildren(node, fileSymbol, keyPath: YesNoType.Yes, win64); | 5730 | this.ParseFileElementChildren(node, fileSymbol, keyPath: YesNoType.Yes, win64); |
| 5729 | 5731 | ||
| 5730 | // if this is a module, automatically add this component to the references to ensure it gets in the ModuleComponents table | 5732 | // if this is a module, automatically add this component to the references to ensure it gets in the ModuleComponents table |
| 5731 | if (this.compilingModule) | 5733 | if (this.compilingModule) |
| 5732 | { | 5734 | { |
| 5733 | this.Core.CreateComplexReference(sourceLineNumbers, ComplexReferenceParentType.Module, this.activeName, this.activeLanguage, ComplexReferenceChildType.Component, fileSymbol.Id.Id, false); | 5735 | this.Core.CreateComplexReference(sourceLineNumbers, ComplexReferenceParentType.Module, this.activeName, this.activeLanguage, ComplexReferenceChildType.Component, fileSymbol.Id.Id, false); |
| 5734 | } | 5736 | } |
| 5735 | else if (ComplexReferenceParentType.Unknown != parentType && null != parentId) // if parent was provided, add a complex reference to that. | 5737 | else if (ComplexReferenceParentType.Unknown != parentType && null != parentId) // if parent was provided, add a complex reference to that. |
| 5736 | { | 5738 | { |
| 5737 | // If the naked file's component is defined directly under a feature, then mark the complex reference primary. | 5739 | // If the naked file's component is defined directly under a feature, then mark the complex reference primary. |
| 5738 | this.Core.CreateComplexReference(sourceLineNumbers, parentType, parentId, null, ComplexReferenceChildType.Component, id.Id, ComplexReferenceParentType.Feature == parentType); | 5740 | this.Core.CreateComplexReference(sourceLineNumbers, parentType, parentId, null, ComplexReferenceChildType.Component, id.Id, ComplexReferenceParentType.Feature == parentType); |
| 5741 | } | ||
| 5739 | } | 5742 | } |
| 5740 | } | 5743 | } |
| 5741 | } | 5744 | } |
| @@ -5892,39 +5895,39 @@ namespace WixToolset.Core | |||
| 5892 | { | 5895 | { |
| 5893 | switch (attrib.Name.LocalName) | 5896 | switch (attrib.Name.LocalName) |
| 5894 | { | 5897 | { |
| 5895 | case "Id": | 5898 | case "Id": |
| 5896 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 5899 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 5897 | break; | 5900 | break; |
| 5898 | case "Name": | 5901 | case "Name": |
| 5899 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); | 5902 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); |
| 5900 | break; | 5903 | break; |
| 5901 | case "MinVersion": | 5904 | case "MinVersion": |
| 5902 | minVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5905 | minVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5903 | break; | 5906 | break; |
| 5904 | case "MaxVersion": | 5907 | case "MaxVersion": |
| 5905 | maxVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5908 | maxVersion = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5906 | break; | 5909 | break; |
| 5907 | case "MinSize": | 5910 | case "MinSize": |
| 5908 | minSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); | 5911 | minSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); |
| 5909 | break; | 5912 | break; |
| 5910 | case "MaxSize": | 5913 | case "MaxSize": |
| 5911 | maxSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); | 5914 | maxSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); |
| 5912 | break; | 5915 | break; |
| 5913 | case "MinDate": | 5916 | case "MinDate": |
| 5914 | minDate = this.Core.GetAttributeDateTimeValue(sourceLineNumbers, attrib); | 5917 | minDate = this.Core.GetAttributeDateTimeValue(sourceLineNumbers, attrib); |
| 5915 | break; | 5918 | break; |
| 5916 | case "MaxDate": | 5919 | case "MaxDate": |
| 5917 | maxDate = this.Core.GetAttributeDateTimeValue(sourceLineNumbers, attrib); | 5920 | maxDate = this.Core.GetAttributeDateTimeValue(sourceLineNumbers, attrib); |
| 5918 | break; | 5921 | break; |
| 5919 | case "Languages": | 5922 | case "Languages": |
| 5920 | languages = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 5923 | languages = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 5921 | break; | 5924 | break; |
| 5922 | case "ShortName": | 5925 | case "ShortName": |
| 5923 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | 5926 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); |
| 5924 | break; | 5927 | break; |
| 5925 | default: | 5928 | default: |
| 5926 | this.Core.UnexpectedAttribute(node, attrib); | 5929 | this.Core.UnexpectedAttribute(node, attrib); |
| 5927 | break; | 5930 | break; |
| 5928 | } | 5931 | } |
| 5929 | } | 5932 | } |
| 5930 | else | 5933 | else |
| @@ -6067,12 +6070,12 @@ namespace WixToolset.Core | |||
| 6067 | { | 6070 | { |
| 6068 | switch (attrib.Name.LocalName) | 6071 | switch (attrib.Name.LocalName) |
| 6069 | { | 6072 | { |
| 6070 | case "Id": | 6073 | case "Id": |
| 6071 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 6074 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 6072 | break; | 6075 | break; |
| 6073 | default: | 6076 | default: |
| 6074 | this.Core.UnexpectedAttribute(node, attrib); | 6077 | this.Core.UnexpectedAttribute(node, attrib); |
| 6075 | break; | 6078 | break; |
| 6076 | } | 6079 | } |
| 6077 | } | 6080 | } |
| 6078 | else | 6081 | else |
| @@ -6092,181 +6095,181 @@ namespace WixToolset.Core | |||
| 6092 | { | 6095 | { |
| 6093 | switch (child.Name.LocalName) | 6096 | switch (child.Name.LocalName) |
| 6094 | { | 6097 | { |
| 6095 | case "_locDefinition": | 6098 | case "_locDefinition": |
| 6096 | break; | 6099 | break; |
| 6097 | case "AdminExecuteSequence": | 6100 | case "AdminExecuteSequence": |
| 6098 | this.ParseSequenceElement(child, SequenceTable.AdminExecuteSequence); | 6101 | this.ParseSequenceElement(child, SequenceTable.AdminExecuteSequence); |
| 6099 | break; | 6102 | break; |
| 6100 | case "AdminUISequence": | 6103 | case "AdminUISequence": |
| 6101 | this.ParseSequenceElement(child, SequenceTable.AdminUISequence); | 6104 | this.ParseSequenceElement(child, SequenceTable.AdminUISequence); |
| 6102 | break; | 6105 | break; |
| 6103 | case "AdvertiseExecuteSequence": | 6106 | case "AdvertiseExecuteSequence": |
| 6104 | this.ParseSequenceElement(child, SequenceTable.AdvertiseExecuteSequence); | 6107 | this.ParseSequenceElement(child, SequenceTable.AdvertiseExecuteSequence); |
| 6105 | break; | 6108 | break; |
| 6106 | case "InstallExecuteSequence": | 6109 | case "InstallExecuteSequence": |
| 6107 | this.ParseSequenceElement(child, SequenceTable.InstallExecuteSequence); | 6110 | this.ParseSequenceElement(child, SequenceTable.InstallExecuteSequence); |
| 6108 | break; | 6111 | break; |
| 6109 | case "InstallUISequence": | 6112 | case "InstallUISequence": |
| 6110 | this.ParseSequenceElement(child, SequenceTable.InstallUISequence); | 6113 | this.ParseSequenceElement(child, SequenceTable.InstallUISequence); |
| 6111 | break; | 6114 | break; |
| 6112 | case "AppId": | 6115 | case "AppId": |
| 6113 | this.ParseAppIdElement(child, null, YesNoType.Yes, null, null, null); | 6116 | this.ParseAppIdElement(child, null, YesNoType.Yes, null, null, null); |
| 6114 | break; | 6117 | break; |
| 6115 | case "Binary": | 6118 | case "Binary": |
| 6116 | this.ParseBinaryElement(child); | 6119 | this.ParseBinaryElement(child); |
| 6117 | break; | 6120 | break; |
| 6118 | case "BootstrapperApplication": | 6121 | case "BootstrapperApplication": |
| 6119 | this.ParseBootstrapperApplicationElement(child); | 6122 | this.ParseBootstrapperApplicationElement(child); |
| 6120 | break; | 6123 | break; |
| 6121 | case "BootstrapperApplicationRef": | 6124 | case "BootstrapperApplicationRef": |
| 6122 | this.ParseBootstrapperApplicationRefElement(child); | 6125 | this.ParseBootstrapperApplicationRefElement(child); |
| 6123 | break; | 6126 | break; |
| 6124 | case "BundleCustomData": | 6127 | case "BundleCustomData": |
| 6125 | this.ParseBundleCustomDataElement(child); | 6128 | this.ParseBundleCustomDataElement(child); |
| 6126 | break; | 6129 | break; |
| 6127 | case "BundleCustomDataRef": | 6130 | case "BundleCustomDataRef": |
| 6128 | this.ParseBundleCustomDataRefElement(child); | 6131 | this.ParseBundleCustomDataRefElement(child); |
| 6129 | break; | 6132 | break; |
| 6130 | case "BootstrapperExtension": | 6133 | case "BootstrapperExtension": |
| 6131 | this.ParseBootstrapperExtensionElement(child); | 6134 | this.ParseBootstrapperExtensionElement(child); |
| 6132 | break; | 6135 | break; |
| 6133 | case "BootstrapperExtensionRef": | 6136 | case "BootstrapperExtensionRef": |
| 6134 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixBootstrapperExtension); | 6137 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixBootstrapperExtension); |
| 6135 | break; | 6138 | break; |
| 6136 | case "ComplianceCheck": | 6139 | case "ComplianceCheck": |
| 6137 | this.ParseComplianceCheckElement(child); | 6140 | this.ParseComplianceCheckElement(child); |
| 6138 | break; | 6141 | break; |
| 6139 | case "Component": | 6142 | case "Component": |
| 6140 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, CompilerConstants.IntegerNotSet, null, null); | 6143 | this.ParseComponentElement(child, ComplexReferenceParentType.Unknown, null, null, CompilerConstants.IntegerNotSet, null, null); |
| 6141 | break; | 6144 | break; |
| 6142 | case "ComponentGroup": | 6145 | case "ComponentGroup": |
| 6143 | this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); | 6146 | this.ParseComponentGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); |
| 6144 | break; | 6147 | break; |
| 6145 | case "Container": | 6148 | case "Container": |
| 6146 | this.ParseContainerElement(child); | 6149 | this.ParseContainerElement(child); |
| 6147 | break; | 6150 | break; |
| 6148 | case "CustomAction": | 6151 | case "CustomAction": |
| 6149 | this.ParseCustomActionElement(child); | 6152 | this.ParseCustomActionElement(child); |
| 6150 | break; | 6153 | break; |
| 6151 | case "CustomActionRef": | 6154 | case "CustomActionRef": |
| 6152 | this.ParseSimpleRefElement(child, SymbolDefinitions.CustomAction); | 6155 | this.ParseSimpleRefElement(child, SymbolDefinitions.CustomAction); |
| 6153 | break; | 6156 | break; |
| 6154 | case "CustomTable": | 6157 | case "CustomTable": |
| 6155 | this.ParseCustomTableElement(child); | 6158 | this.ParseCustomTableElement(child); |
| 6156 | break; | 6159 | break; |
| 6157 | case "CustomTableRef": | 6160 | case "CustomTableRef": |
| 6158 | this.ParseCustomTableRefElement(child); | 6161 | this.ParseCustomTableRefElement(child); |
| 6159 | break; | 6162 | break; |
| 6160 | case "Directory": | 6163 | case "Directory": |
| 6161 | this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty); | 6164 | this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty); |
| 6162 | break; | 6165 | break; |
| 6163 | case "DirectoryRef": | 6166 | case "DirectoryRef": |
| 6164 | this.ParseDirectoryRefElement(child); | 6167 | this.ParseDirectoryRefElement(child); |
| 6165 | break; | 6168 | break; |
| 6166 | case "EmbeddedChainer": | 6169 | case "EmbeddedChainer": |
| 6167 | this.ParseEmbeddedChainerElement(child); | 6170 | this.ParseEmbeddedChainerElement(child); |
| 6168 | break; | 6171 | break; |
| 6169 | case "EmbeddedChainerRef": | 6172 | case "EmbeddedChainerRef": |
| 6170 | this.ParseSimpleRefElement(child, SymbolDefinitions.MsiEmbeddedChainer); | 6173 | this.ParseSimpleRefElement(child, SymbolDefinitions.MsiEmbeddedChainer); |
| 6171 | break; | 6174 | break; |
| 6172 | case "EnsureTable": | 6175 | case "EnsureTable": |
| 6173 | this.ParseEnsureTableElement(child); | 6176 | this.ParseEnsureTableElement(child); |
| 6174 | break; | 6177 | break; |
| 6175 | case "Feature": | 6178 | case "Feature": |
| 6176 | this.ParseFeatureElement(child, ComplexReferenceParentType.Unknown, null, ref featureDisplay); | 6179 | this.ParseFeatureElement(child, ComplexReferenceParentType.Unknown, null, ref featureDisplay); |
| 6177 | break; | 6180 | break; |
| 6178 | case "FeatureGroup": | 6181 | case "FeatureGroup": |
| 6179 | this.ParseFeatureGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); | 6182 | this.ParseFeatureGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); |
| 6180 | break; | 6183 | break; |
| 6181 | case "FeatureRef": | 6184 | case "FeatureRef": |
| 6182 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Unknown, null); | 6185 | this.ParseFeatureRefElement(child, ComplexReferenceParentType.Unknown, null); |
| 6183 | break; | 6186 | break; |
| 6184 | case "File": | 6187 | case "File": |
| 6185 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, null, null); | 6188 | this.ParseNakedFileElement(child, ComplexReferenceParentType.Unknown, null, null, null); |
| 6186 | break; | 6189 | break; |
| 6187 | case "Files": | 6190 | case "Files": |
| 6188 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, null, null); | 6191 | this.ParseFilesElement(child, ComplexReferenceParentType.Unknown, null, null, null); |
| 6189 | break; | 6192 | break; |
| 6190 | case "Icon": | 6193 | case "Icon": |
| 6191 | this.ParseIconElement(child); | 6194 | this.ParseIconElement(child); |
| 6192 | break; | 6195 | break; |
| 6193 | case "Media": | 6196 | case "Media": |
| 6194 | this.ParseMediaElement(child, null); | 6197 | this.ParseMediaElement(child, null); |
| 6195 | break; | 6198 | break; |
| 6196 | case "MediaTemplate": | 6199 | case "MediaTemplate": |
| 6197 | this.ParseMediaTemplateElement(child, null); | 6200 | this.ParseMediaTemplateElement(child, null); |
| 6198 | break; | 6201 | break; |
| 6199 | case "Launch": | 6202 | case "Launch": |
| 6200 | this.ParseLaunchElement(child); | 6203 | this.ParseLaunchElement(child); |
| 6201 | break; | 6204 | break; |
| 6202 | case "PackageGroup": | 6205 | case "PackageGroup": |
| 6203 | this.ParsePackageGroupElement(child); | 6206 | this.ParsePackageGroupElement(child); |
| 6204 | break; | 6207 | break; |
| 6205 | case "PackageCertificates": | 6208 | case "PackageCertificates": |
| 6206 | case "PatchCertificates": | 6209 | case "PatchCertificates": |
| 6207 | this.ParseCertificatesElement(child); | 6210 | this.ParseCertificatesElement(child); |
| 6208 | break; | 6211 | break; |
| 6209 | case "PatchFamily": | 6212 | case "PatchFamily": |
| 6210 | this.ParsePatchFamilyElement(child, ComplexReferenceParentType.Unknown, id?.Id); | 6213 | this.ParsePatchFamilyElement(child, ComplexReferenceParentType.Unknown, id?.Id); |
| 6211 | break; | 6214 | break; |
| 6212 | case "PatchFamilyGroup": | 6215 | case "PatchFamilyGroup": |
| 6213 | this.ParsePatchFamilyGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); | 6216 | this.ParsePatchFamilyGroupElement(child, ComplexReferenceParentType.Unknown, id?.Id); |
| 6214 | break; | 6217 | break; |
| 6215 | case "PatchFamilyGroupRef": | 6218 | case "PatchFamilyGroupRef": |
| 6216 | this.ParsePatchFamilyGroupRefElement(child, ComplexReferenceParentType.Unknown, id?.Id); | 6219 | this.ParsePatchFamilyGroupRefElement(child, ComplexReferenceParentType.Unknown, id?.Id); |
| 6217 | break; | 6220 | break; |
| 6218 | case "PayloadGroup": | 6221 | case "PayloadGroup": |
| 6219 | this.ParsePayloadGroupElement(child, ComplexReferenceParentType.Unknown, null); | 6222 | this.ParsePayloadGroupElement(child, ComplexReferenceParentType.Unknown, null); |
| 6220 | break; | 6223 | break; |
| 6221 | case "Property": | 6224 | case "Property": |
| 6222 | this.ParsePropertyElement(child); | 6225 | this.ParsePropertyElement(child); |
| 6223 | break; | 6226 | break; |
| 6224 | case "PropertyRef": | 6227 | case "PropertyRef": |
| 6225 | this.ParseSimpleRefElement(child, SymbolDefinitions.Property); | 6228 | this.ParseSimpleRefElement(child, SymbolDefinitions.Property); |
| 6226 | break; | 6229 | break; |
| 6227 | case "RelatedBundle": | 6230 | case "RelatedBundle": |
| 6228 | this.ParseRelatedBundleElement(child); | 6231 | this.ParseRelatedBundleElement(child); |
| 6229 | break; | 6232 | break; |
| 6230 | case "Requires": | 6233 | case "Requires": |
| 6231 | this.ParseRequiresElement(child, null); | 6234 | this.ParseRequiresElement(child, null); |
| 6232 | break; | 6235 | break; |
| 6233 | case "SetDirectory": | 6236 | case "SetDirectory": |
| 6234 | this.ParseSetDirectoryElement(child); | 6237 | this.ParseSetDirectoryElement(child); |
| 6235 | break; | 6238 | break; |
| 6236 | case "SetProperty": | 6239 | case "SetProperty": |
| 6237 | this.ParseSetPropertyElement(child); | 6240 | this.ParseSetPropertyElement(child); |
| 6238 | break; | 6241 | break; |
| 6239 | case "SetVariable": | 6242 | case "SetVariable": |
| 6240 | this.ParseSetVariableElement(child); | 6243 | this.ParseSetVariableElement(child); |
| 6241 | break; | 6244 | break; |
| 6242 | case "SetVariableRef": | 6245 | case "SetVariableRef": |
| 6243 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixSetVariable); | 6246 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixSetVariable); |
| 6244 | break; | 6247 | break; |
| 6245 | case "SFPCatalog": | 6248 | case "SFPCatalog": |
| 6246 | string parentName = null; | 6249 | string parentName = null; |
| 6247 | this.ParseSFPCatalogElement(child, ref parentName); | 6250 | this.ParseSFPCatalogElement(child, ref parentName); |
| 6248 | break; | 6251 | break; |
| 6249 | case "StandardDirectory": | 6252 | case "StandardDirectory": |
| 6250 | this.ParseStandardDirectoryElement(child); | 6253 | this.ParseStandardDirectoryElement(child); |
| 6251 | break; | 6254 | break; |
| 6252 | case "UI": | 6255 | case "UI": |
| 6253 | this.ParseUIElement(child); | 6256 | this.ParseUIElement(child); |
| 6254 | break; | 6257 | break; |
| 6255 | case "UIRef": | 6258 | case "UIRef": |
| 6256 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI); | 6259 | this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI); |
| 6257 | break; | 6260 | break; |
| 6258 | case "Upgrade": | 6261 | case "Upgrade": |
| 6259 | this.ParseUpgradeElement(child); | 6262 | this.ParseUpgradeElement(child); |
| 6260 | break; | 6263 | break; |
| 6261 | case "Variable": | 6264 | case "Variable": |
| 6262 | this.ParseVariableElement(child); | 6265 | this.ParseVariableElement(child); |
| 6263 | break; | 6266 | break; |
| 6264 | case "WixVariable": | 6267 | case "WixVariable": |
| 6265 | this.ParseWixVariableElement(child); | 6268 | this.ParseWixVariableElement(child); |
| 6266 | break; | 6269 | break; |
| 6267 | default: | 6270 | default: |
| 6268 | this.Core.UnexpectedElement(node, child); | 6271 | this.Core.UnexpectedElement(node, child); |
| 6269 | break; | 6272 | break; |
| 6270 | } | 6273 | } |
| 6271 | } | 6274 | } |
| 6272 | else | 6275 | else |
| @@ -6359,56 +6362,56 @@ namespace WixToolset.Core | |||
| 6359 | { | 6362 | { |
| 6360 | switch (attrib.Name.LocalName) | 6363 | switch (attrib.Name.LocalName) |
| 6361 | { | 6364 | { |
| 6362 | case "Id": | 6365 | case "Id": |
| 6363 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 6366 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 6364 | break; | 6367 | break; |
| 6365 | case "Action": | 6368 | case "Action": |
| 6366 | var actionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6369 | var actionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6367 | switch (actionValue) | 6370 | switch (actionValue) |
| 6368 | { | 6371 | { |
| 6369 | case "addLine": | 6372 | case "addLine": |
| 6370 | action = IniFileActionType.AddLine; | 6373 | action = IniFileActionType.AddLine; |
| 6371 | break; | 6374 | break; |
| 6372 | case "addTag": | 6375 | case "addTag": |
| 6373 | action = IniFileActionType.AddTag; | 6376 | action = IniFileActionType.AddTag; |
| 6374 | break; | 6377 | break; |
| 6375 | case "createLine": | 6378 | case "createLine": |
| 6376 | action = IniFileActionType.CreateLine; | 6379 | action = IniFileActionType.CreateLine; |
| 6377 | break; | 6380 | break; |
| 6378 | case "removeLine": | 6381 | case "removeLine": |
| 6379 | action = IniFileActionType.RemoveLine; | 6382 | action = IniFileActionType.RemoveLine; |
| 6380 | break; | 6383 | break; |
| 6381 | case "removeTag": | 6384 | case "removeTag": |
| 6382 | action = IniFileActionType.RemoveTag; | 6385 | action = IniFileActionType.RemoveTag; |
| 6383 | break; | 6386 | break; |
| 6384 | case "": // error case handled by GetAttributeValue() | 6387 | case "": // error case handled by GetAttributeValue() |
| 6385 | break; | 6388 | break; |
| 6386 | default: | 6389 | default: |
| 6387 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", actionValue, "addLine", "addTag", "createLine", "removeLine", "removeTag")); | 6390 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Action", actionValue, "addLine", "addTag", "createLine", "removeLine", "removeTag")); |
| 6388 | break; | 6391 | break; |
| 6389 | } | 6392 | } |
| 6390 | break; | 6393 | break; |
| 6391 | case "Directory": | 6394 | case "Directory": |
| 6392 | directory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 6395 | directory = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 6393 | break; | 6396 | break; |
| 6394 | case "Key": | 6397 | case "Key": |
| 6395 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6398 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6396 | break; | 6399 | break; |
| 6397 | case "Name": | 6400 | case "Name": |
| 6398 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); | 6401 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); |
| 6399 | break; | 6402 | break; |
| 6400 | case "Section": | 6403 | case "Section": |
| 6401 | section = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6404 | section = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6402 | break; | 6405 | break; |
| 6403 | case "ShortName": | 6406 | case "ShortName": |
| 6404 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | 6407 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); |
| 6405 | break; | 6408 | break; |
| 6406 | case "Value": | 6409 | case "Value": |
| 6407 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6410 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6408 | break; | 6411 | break; |
| 6409 | default: | 6412 | default: |
| 6410 | this.Core.UnexpectedAttribute(node, attrib); | 6413 | this.Core.UnexpectedAttribute(node, attrib); |
| 6411 | break; | 6414 | break; |
| 6412 | } | 6415 | } |
| 6413 | } | 6416 | } |
| 6414 | else | 6417 | else |
| @@ -6489,47 +6492,47 @@ namespace WixToolset.Core | |||
| 6489 | { | 6492 | { |
| 6490 | switch (attrib.Name.LocalName) | 6493 | switch (attrib.Name.LocalName) |
| 6491 | { | 6494 | { |
| 6492 | case "Id": | 6495 | case "Id": |
| 6493 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 6496 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 6494 | break; | ||
| 6495 | case "Field": | ||
| 6496 | field = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | ||
| 6497 | break; | ||
| 6498 | case "Key": | ||
| 6499 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 6500 | break; | ||
| 6501 | case "Name": | ||
| 6502 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); | ||
| 6503 | break; | ||
| 6504 | case "Section": | ||
| 6505 | section = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 6506 | break; | ||
| 6507 | case "ShortName": | ||
| 6508 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | ||
| 6509 | break; | ||
| 6510 | case "Type": | ||
| 6511 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 6512 | switch (typeValue) | ||
| 6513 | { | ||
| 6514 | case "directory": | ||
| 6515 | type = 0; | ||
| 6516 | break; | 6497 | break; |
| 6517 | case "file": | 6498 | case "Field": |
| 6518 | type = 1; | 6499 | field = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); |
| 6519 | break; | 6500 | break; |
| 6520 | case "raw": | 6501 | case "Key": |
| 6521 | type = 2; | 6502 | key = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6522 | break; | 6503 | break; |
| 6523 | case "": | 6504 | case "Name": |
| 6505 | name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, false); | ||
| 6506 | break; | ||
| 6507 | case "Section": | ||
| 6508 | section = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 6509 | break; | ||
| 6510 | case "ShortName": | ||
| 6511 | shortName = this.Core.GetAttributeShortFilename(sourceLineNumbers, attrib, false); | ||
| 6512 | break; | ||
| 6513 | case "Type": | ||
| 6514 | var typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 6515 | switch (typeValue) | ||
| 6516 | { | ||
| 6517 | case "directory": | ||
| 6518 | type = 0; | ||
| 6519 | break; | ||
| 6520 | case "file": | ||
| 6521 | type = 1; | ||
| 6522 | break; | ||
| 6523 | case "raw": | ||
| 6524 | type = 2; | ||
| 6525 | break; | ||
| 6526 | case "": | ||
| 6527 | break; | ||
| 6528 | default: | ||
| 6529 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "registry")); | ||
| 6530 | break; | ||
| 6531 | } | ||
| 6524 | break; | 6532 | break; |
| 6525 | default: | 6533 | default: |
| 6526 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Type", typeValue, "directory", "file", "registry")); | 6534 | this.Core.UnexpectedAttribute(node, attrib); |
| 6527 | break; | 6535 | break; |
| 6528 | } | ||
| 6529 | break; | ||
| 6530 | default: | ||
| 6531 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 6532 | break; | ||
| 6533 | } | 6536 | } |
| 6534 | } | 6537 | } |
| 6535 | else | 6538 | else |
| @@ -6568,46 +6571,46 @@ namespace WixToolset.Core | |||
| 6568 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 6571 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
| 6569 | switch (child.Name.LocalName) | 6572 | switch (child.Name.LocalName) |
| 6570 | { | 6573 | { |
| 6571 | case "DirectorySearch": | 6574 | case "DirectorySearch": |
| 6572 | if (oneChild) | 6575 | if (oneChild) |
| 6573 | { | 6576 | { |
| 6574 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 6577 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 6575 | } | 6578 | } |
| 6576 | oneChild = true; | 6579 | oneChild = true; |
| 6577 | 6580 | ||
| 6578 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column | 6581 | // directorysearch parentage should work like directory element, not the rest of the signature type because of the DrLocator.Parent column |
| 6579 | signature = this.ParseDirectorySearchElement(child, id.Id); | 6582 | signature = this.ParseDirectorySearchElement(child, id.Id); |
| 6580 | break; | 6583 | break; |
| 6581 | case "DirectorySearchRef": | 6584 | case "DirectorySearchRef": |
| 6582 | if (oneChild) | 6585 | if (oneChild) |
| 6583 | { | 6586 | { |
| 6584 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); | 6587 | this.Core.Write(ErrorMessages.TooManySearchElements(childSourceLineNumbers, node.Name.LocalName)); |
| 6585 | } | 6588 | } |
| 6586 | oneChild = true; | 6589 | oneChild = true; |
| 6587 | signature = this.ParseDirectorySearchRefElement(child, id.Id); | 6590 | signature = this.ParseDirectorySearchRefElement(child, id.Id); |
| 6588 | break; | 6591 | break; |
| 6589 | case "FileSearch": | 6592 | case "FileSearch": |
| 6590 | if (oneChild) | 6593 | if (oneChild) |
| 6591 | { | 6594 | { |
| 6592 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 6595 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 6593 | } | 6596 | } |
| 6594 | oneChild = true; | 6597 | oneChild = true; |
| 6595 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); | 6598 | signature = this.ParseFileSearchElement(child, id.Id, false, CompilerConstants.IntegerNotSet); |
| 6596 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures | 6599 | id = new Identifier(AccessModifier.Section, signature); // FileSearch signatures override parent signatures |
| 6597 | break; | 6600 | break; |
| 6598 | case "FileSearchRef": | 6601 | case "FileSearchRef": |
| 6599 | if (oneChild) | 6602 | if (oneChild) |
| 6600 | { | 6603 | { |
| 6601 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); | 6604 | this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); |
| 6602 | } | 6605 | } |
| 6603 | oneChild = true; | 6606 | oneChild = true; |
| 6604 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures | 6607 | var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures |
| 6605 | id = new Identifier(AccessModifier.Section, newId); | 6608 | id = new Identifier(AccessModifier.Section, newId); |
| 6606 | signature = null; | 6609 | signature = null; |
| 6607 | break; | 6610 | break; |
| 6608 | default: | 6611 | default: |
| 6609 | this.Core.UnexpectedElement(node, child); | 6612 | this.Core.UnexpectedElement(node, child); |
| 6610 | break; | 6613 | break; |
| 6611 | } | 6614 | } |
| 6612 | } | 6615 | } |
| 6613 | else | 6616 | else |
| @@ -6652,13 +6655,13 @@ namespace WixToolset.Core | |||
| 6652 | { | 6655 | { |
| 6653 | switch (attrib.Name.LocalName) | 6656 | switch (attrib.Name.LocalName) |
| 6654 | { | 6657 | { |
| 6655 | case "Shared": | 6658 | case "Shared": |
| 6656 | shared = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 6659 | shared = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 6657 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, shared); | 6660 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, shared); |
| 6658 | break; | 6661 | break; |
| 6659 | default: | 6662 | default: |
| 6660 | this.Core.UnexpectedAttribute(node, attrib); | 6663 | this.Core.UnexpectedAttribute(node, attrib); |
| 6661 | break; | 6664 | break; |
| 6662 | } | 6665 | } |
| 6663 | } | 6666 | } |
| 6664 | else | 6667 | else |
| @@ -6711,32 +6714,32 @@ namespace WixToolset.Core | |||
| 6711 | { | 6714 | { |
| 6712 | switch (child.Name.LocalName) | 6715 | switch (child.Name.LocalName) |
| 6713 | { | 6716 | { |
| 6714 | case "DigitalCertificate": | 6717 | case "DigitalCertificate": |
| 6715 | var name = this.ParseDigitalCertificateElement(child); | 6718 | var name = this.ParseDigitalCertificateElement(child); |
| 6716 | 6719 | ||
| 6717 | if (!this.Core.EncounteredError) | 6720 | if (!this.Core.EncounteredError) |
| 6718 | { | ||
| 6719 | if ("PatchCertificates" == node.Name.LocalName) | ||
| 6720 | { | 6721 | { |
| 6721 | this.Core.AddSymbol(new MsiPatchCertificateSymbol(sourceLineNumbers) | 6722 | if ("PatchCertificates" == node.Name.LocalName) |
| 6722 | { | 6723 | { |
| 6723 | PatchCertificate = name, | 6724 | this.Core.AddSymbol(new MsiPatchCertificateSymbol(sourceLineNumbers) |
| 6724 | DigitalCertificateRef = name, | 6725 | { |
| 6725 | }); | 6726 | PatchCertificate = name, |
| 6726 | } | 6727 | DigitalCertificateRef = name, |
| 6727 | else | 6728 | }); |
| 6728 | { | 6729 | } |
| 6729 | this.Core.AddSymbol(new MsiPackageCertificateSymbol(sourceLineNumbers) | 6730 | else |
| 6730 | { | 6731 | { |
| 6731 | PackageCertificate = name, | 6732 | this.Core.AddSymbol(new MsiPackageCertificateSymbol(sourceLineNumbers) |
| 6732 | DigitalCertificateRef = name, | 6733 | { |
| 6733 | }); | 6734 | PackageCertificate = name, |
| 6735 | DigitalCertificateRef = name, | ||
| 6736 | }); | ||
| 6737 | } | ||
| 6734 | } | 6738 | } |
| 6735 | } | 6739 | break; |
| 6736 | break; | 6740 | default: |
| 6737 | default: | 6741 | this.Core.UnexpectedElement(node, child); |
| 6738 | this.Core.UnexpectedElement(node, child); | 6742 | break; |
| 6739 | break; | ||
| 6740 | } | 6743 | } |
| 6741 | } | 6744 | } |
| 6742 | else | 6745 | else |
| @@ -6763,15 +6766,15 @@ namespace WixToolset.Core | |||
| 6763 | { | 6766 | { |
| 6764 | switch (attrib.Name.LocalName) | 6767 | switch (attrib.Name.LocalName) |
| 6765 | { | 6768 | { |
| 6766 | case "Id": | 6769 | case "Id": |
| 6767 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 6770 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 6768 | break; | 6771 | break; |
| 6769 | case "SourceFile": | 6772 | case "SourceFile": |
| 6770 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6773 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6771 | break; | 6774 | break; |
| 6772 | default: | 6775 | default: |
| 6773 | this.Core.UnexpectedAttribute(node, attrib); | 6776 | this.Core.UnexpectedAttribute(node, attrib); |
| 6774 | break; | 6777 | break; |
| 6775 | } | 6778 | } |
| 6776 | } | 6779 | } |
| 6777 | else | 6780 | else |
| @@ -6828,12 +6831,12 @@ namespace WixToolset.Core | |||
| 6828 | { | 6831 | { |
| 6829 | switch (attrib.Name.LocalName) | 6832 | switch (attrib.Name.LocalName) |
| 6830 | { | 6833 | { |
| 6831 | case "SourceFile": | 6834 | case "SourceFile": |
| 6832 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6835 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6833 | break; | 6836 | break; |
| 6834 | default: | 6837 | default: |
| 6835 | this.Core.UnexpectedAttribute(node, attrib); | 6838 | this.Core.UnexpectedAttribute(node, attrib); |
| 6836 | break; | 6839 | break; |
| 6837 | } | 6840 | } |
| 6838 | } | 6841 | } |
| 6839 | else | 6842 | else |
| @@ -6854,12 +6857,12 @@ namespace WixToolset.Core | |||
| 6854 | { | 6857 | { |
| 6855 | switch (child.Name.LocalName) | 6858 | switch (child.Name.LocalName) |
| 6856 | { | 6859 | { |
| 6857 | case "DigitalCertificate": | 6860 | case "DigitalCertificate": |
| 6858 | certificateId = this.ParseDigitalCertificateElement(child); | 6861 | certificateId = this.ParseDigitalCertificateElement(child); |
| 6859 | break; | 6862 | break; |
| 6860 | default: | 6863 | default: |
| 6861 | this.Core.UnexpectedElement(node, child); | 6864 | this.Core.UnexpectedElement(node, child); |
| 6862 | break; | 6865 | break; |
| 6863 | } | 6866 | } |
| 6864 | } | 6867 | } |
| 6865 | else | 6868 | else |
| @@ -6923,42 +6926,42 @@ namespace WixToolset.Core | |||
| 6923 | { | 6926 | { |
| 6924 | switch (attrib.Name.LocalName) | 6927 | switch (attrib.Name.LocalName) |
| 6925 | { | 6928 | { |
| 6926 | case "AllowDowngrades": | 6929 | case "AllowDowngrades": |
| 6927 | allowDowngrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 6930 | allowDowngrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 6928 | break; | 6931 | break; |
| 6929 | case "AllowSameVersionUpgrades": | 6932 | case "AllowSameVersionUpgrades": |
| 6930 | allowSameVersionUpgrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 6933 | allowSameVersionUpgrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 6931 | break; | 6934 | break; |
| 6932 | case "Disallow": | 6935 | case "Disallow": |
| 6933 | blockUpgrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 6936 | blockUpgrades = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 6934 | break; | 6937 | break; |
| 6935 | case "DowngradeErrorMessage": | 6938 | case "DowngradeErrorMessage": |
| 6936 | downgradeErrorMessage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6939 | downgradeErrorMessage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6937 | break; | 6940 | break; |
| 6938 | case "DisallowUpgradeErrorMessage": | 6941 | case "DisallowUpgradeErrorMessage": |
| 6939 | disallowUpgradeErrorMessage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6942 | disallowUpgradeErrorMessage = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6940 | break; | 6943 | break; |
| 6941 | case "MigrateFeatures": | 6944 | case "MigrateFeatures": |
| 6942 | migrateFeatures = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)); | 6945 | migrateFeatures = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)); |
| 6943 | break; | 6946 | break; |
| 6944 | case "IgnoreLanguage": | 6947 | case "IgnoreLanguage": |
| 6945 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | 6948 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 6946 | { | 6949 | { |
| 6947 | productLanguage = null; | 6950 | productLanguage = null; |
| 6948 | } | 6951 | } |
| 6949 | break; | 6952 | break; |
| 6950 | case "IgnoreRemoveFailure": | 6953 | case "IgnoreRemoveFailure": |
| 6951 | ignoreRemoveFailure = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)); | 6954 | ignoreRemoveFailure = (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)); |
| 6952 | break; | 6955 | break; |
| 6953 | case "RemoveFeatures": | 6956 | case "RemoveFeatures": |
| 6954 | removeFeatures = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6957 | removeFeatures = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6955 | break; | 6958 | break; |
| 6956 | case "Schedule": | 6959 | case "Schedule": |
| 6957 | schedule = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 6960 | schedule = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 6958 | break; | 6961 | break; |
| 6959 | default: | 6962 | default: |
| 6960 | this.Core.UnexpectedAttribute(node, attrib); | 6963 | this.Core.UnexpectedAttribute(node, attrib); |
| 6961 | break; | 6964 | break; |
| 6962 | } | 6965 | } |
| 6963 | } | 6966 | } |
| 6964 | else | 6967 | else |
| @@ -7101,34 +7104,34 @@ namespace WixToolset.Core | |||
| 7101 | { | 7104 | { |
| 7102 | switch (attrib.Name.LocalName) | 7105 | switch (attrib.Name.LocalName) |
| 7103 | { | 7106 | { |
| 7104 | case "Id": | 7107 | case "Id": |
| 7105 | id = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 7108 | id = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 7106 | break; | 7109 | break; |
| 7107 | case "Cabinet": | 7110 | case "Cabinet": |
| 7108 | cabinet = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7111 | cabinet = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7109 | break; | 7112 | break; |
| 7110 | case "CompressionLevel": | 7113 | case "CompressionLevel": |
| 7111 | compressionLevel = this.ParseCompressionLevel(sourceLineNumbers, attrib); | 7114 | compressionLevel = this.ParseCompressionLevel(sourceLineNumbers, attrib); |
| 7112 | break; | 7115 | break; |
| 7113 | case "DiskPrompt": | 7116 | case "DiskPrompt": |
| 7114 | diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7117 | diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7115 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined | 7118 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined |
| 7116 | break; | 7119 | break; |
| 7117 | case "EmbedCab": | 7120 | case "EmbedCab": |
| 7118 | embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7121 | embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7119 | break; | 7122 | break; |
| 7120 | case "Layout": | 7123 | case "Layout": |
| 7121 | layout = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7124 | layout = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7122 | break; | 7125 | break; |
| 7123 | case "VolumeLabel": | 7126 | case "VolumeLabel": |
| 7124 | volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7127 | volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7125 | break; | 7128 | break; |
| 7126 | case "Source": | 7129 | case "Source": |
| 7127 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7130 | source = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7128 | break; | 7131 | break; |
| 7129 | default: | 7132 | default: |
| 7130 | this.Core.UnexpectedAttribute(node, attrib); | 7133 | this.Core.UnexpectedAttribute(node, attrib); |
| 7131 | break; | 7134 | break; |
| 7132 | } | 7135 | } |
| 7133 | } | 7136 | } |
| 7134 | else | 7137 | else |
| @@ -7192,43 +7195,43 @@ namespace WixToolset.Core | |||
| 7192 | { | 7195 | { |
| 7193 | switch (child.Name.LocalName) | 7196 | switch (child.Name.LocalName) |
| 7194 | { | 7197 | { |
| 7195 | case "DigitalSignature": | 7198 | case "DigitalSignature": |
| 7196 | if (YesNoType.Yes == embedCab) | 7199 | if (YesNoType.Yes == embedCab) |
| 7197 | { | 7200 | { |
| 7198 | this.Core.Write(ErrorMessages.SignedEmbeddedCabinet(childSourceLineNumbers)); | 7201 | this.Core.Write(ErrorMessages.SignedEmbeddedCabinet(childSourceLineNumbers)); |
| 7199 | } | 7202 | } |
| 7200 | else if (null == cabinet) | 7203 | else if (null == cabinet) |
| 7201 | { | 7204 | { |
| 7202 | this.Core.Write(ErrorMessages.ExpectedSignedCabinetName(childSourceLineNumbers)); | 7205 | this.Core.Write(ErrorMessages.ExpectedSignedCabinetName(childSourceLineNumbers)); |
| 7203 | } | 7206 | } |
| 7204 | else | 7207 | else |
| 7205 | { | 7208 | { |
| 7206 | this.ParseDigitalSignatureElement(child, id.ToString(CultureInfo.InvariantCulture.NumberFormat)); | 7209 | this.ParseDigitalSignatureElement(child, id.ToString(CultureInfo.InvariantCulture.NumberFormat)); |
| 7207 | } | 7210 | } |
| 7208 | break; | 7211 | break; |
| 7209 | case "PatchBaseline": | 7212 | case "PatchBaseline": |
| 7210 | if (patch) | 7213 | if (patch) |
| 7211 | { | 7214 | { |
| 7212 | this.ParsePatchBaselineElement(child, id); | 7215 | this.ParsePatchBaselineElement(child, id); |
| 7213 | } | 7216 | } |
| 7214 | else | 7217 | else |
| 7215 | { | 7218 | { |
| 7219 | this.Core.UnexpectedElement(node, child); | ||
| 7220 | } | ||
| 7221 | break; | ||
| 7222 | case "SymbolPath": | ||
| 7223 | if (null != symbols) | ||
| 7224 | { | ||
| 7225 | symbols += "" + this.ParseSymbolPathElement(child); | ||
| 7226 | } | ||
| 7227 | else | ||
| 7228 | { | ||
| 7229 | symbols = this.ParseSymbolPathElement(child); | ||
| 7230 | } | ||
| 7231 | break; | ||
| 7232 | default: | ||
| 7216 | this.Core.UnexpectedElement(node, child); | 7233 | this.Core.UnexpectedElement(node, child); |
| 7217 | } | 7234 | break; |
| 7218 | break; | ||
| 7219 | case "SymbolPath": | ||
| 7220 | if (null != symbols) | ||
| 7221 | { | ||
| 7222 | symbols += "" + this.ParseSymbolPathElement(child); | ||
| 7223 | } | ||
| 7224 | else | ||
| 7225 | { | ||
| 7226 | symbols = this.ParseSymbolPathElement(child); | ||
| 7227 | } | ||
| 7228 | break; | ||
| 7229 | default: | ||
| 7230 | this.Core.UnexpectedElement(node, child); | ||
| 7231 | break; | ||
| 7232 | } | 7235 | } |
| 7233 | } | 7236 | } |
| 7234 | else | 7237 | else |
| @@ -7287,53 +7290,53 @@ namespace WixToolset.Core | |||
| 7287 | { | 7290 | { |
| 7288 | switch (attrib.Name.LocalName) | 7291 | switch (attrib.Name.LocalName) |
| 7289 | { | 7292 | { |
| 7290 | case "CabinetTemplate": | 7293 | case "CabinetTemplate": |
| 7291 | var authoredCabinetTemplateValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); | 7294 | var authoredCabinetTemplateValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); |
| 7292 | if (!String.IsNullOrEmpty(authoredCabinetTemplateValue)) | 7295 | if (!String.IsNullOrEmpty(authoredCabinetTemplateValue)) |
| 7293 | { | ||
| 7294 | cabinetTemplate = authoredCabinetTemplateValue; | ||
| 7295 | } | ||
| 7296 | |||
| 7297 | // Create an example cabinet name using the maximum number of cabinets supported, 999. | ||
| 7298 | var exampleCabinetName = String.Format(cabinetTemplate, "###"); | ||
| 7299 | if (!this.Core.IsValidLocIdentifier(exampleCabinetName)) | ||
| 7300 | { | ||
| 7301 | // The example name should not match the authored template since that would nullify the | ||
| 7302 | // reason for having multiple cabinets. External cabinet files must also be valid file names. | ||
| 7303 | if (exampleCabinetName.Equals(authoredCabinetTemplateValue, StringComparison.OrdinalIgnoreCase) || !this.Core.IsValidLongFilename(exampleCabinetName, false)) | ||
| 7304 | { | 7296 | { |
| 7305 | this.Core.Write(ErrorMessages.InvalidCabinetTemplate(sourceLineNumbers, cabinetTemplate)); | 7297 | cabinetTemplate = authoredCabinetTemplateValue; |
| 7306 | } | 7298 | } |
| 7307 | else if (!this.Core.IsValidLongFilename(exampleCabinetName) && !Common.ContainsValidBinderVariable(exampleCabinetName)) // ignore short names with wix variables because it rarely works out. | 7299 | |
| 7300 | // Create an example cabinet name using the maximum number of cabinets supported, 999. | ||
| 7301 | var exampleCabinetName = String.Format(cabinetTemplate, "###"); | ||
| 7302 | if (!this.Core.IsValidLocIdentifier(exampleCabinetName)) | ||
| 7308 | { | 7303 | { |
| 7309 | this.Core.Write(WarningMessages.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "CabinetTemplate", cabinetTemplate)); | 7304 | // The example name should not match the authored template since that would nullify the |
| 7305 | // reason for having multiple cabinets. External cabinet files must also be valid file names. | ||
| 7306 | if (exampleCabinetName.Equals(authoredCabinetTemplateValue, StringComparison.OrdinalIgnoreCase) || !this.Core.IsValidLongFilename(exampleCabinetName, false)) | ||
| 7307 | { | ||
| 7308 | this.Core.Write(ErrorMessages.InvalidCabinetTemplate(sourceLineNumbers, cabinetTemplate)); | ||
| 7309 | } | ||
| 7310 | else if (!this.Core.IsValidLongFilename(exampleCabinetName) && !Common.ContainsValidBinderVariable(exampleCabinetName)) // ignore short names with wix variables because it rarely works out. | ||
| 7311 | { | ||
| 7312 | this.Core.Write(WarningMessages.MediaExternalCabinetFilenameIllegal(sourceLineNumbers, node.Name.LocalName, "CabinetTemplate", cabinetTemplate)); | ||
| 7313 | } | ||
| 7310 | } | 7314 | } |
| 7311 | } | 7315 | break; |
| 7312 | break; | 7316 | case "CompressionLevel": |
| 7313 | case "CompressionLevel": | 7317 | compressionLevel = this.ParseCompressionLevel(sourceLineNumbers, attrib); |
| 7314 | compressionLevel = this.ParseCompressionLevel(sourceLineNumbers, attrib); | 7318 | break; |
| 7315 | break; | 7319 | case "DiskPrompt": |
| 7316 | case "DiskPrompt": | 7320 | diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7317 | diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7321 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined |
| 7318 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined | 7322 | this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); |
| 7319 | this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | 7323 | break; |
| 7320 | break; | 7324 | case "EmbedCab": |
| 7321 | case "EmbedCab": | 7325 | embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7322 | embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7326 | break; |
| 7323 | break; | 7327 | case "VolumeLabel": |
| 7324 | case "VolumeLabel": | 7328 | volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7325 | volumeLabel = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7329 | this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); |
| 7326 | this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | 7330 | break; |
| 7327 | break; | 7331 | case "MaximumUncompressedMediaSize": |
| 7328 | case "MaximumUncompressedMediaSize": | 7332 | maximumUncompressedMediaSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int32.MaxValue); |
| 7329 | maximumUncompressedMediaSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int32.MaxValue); | 7333 | break; |
| 7330 | break; | 7334 | case "MaximumCabinetSizeForLargeFileSplitting": |
| 7331 | case "MaximumCabinetSizeForLargeFileSplitting": | 7335 | maximumCabinetSizeForLargeFileSplitting = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Compiler.MinValueOfMaxCabSizeForLargeFileSplitting, Compiler.MaxValueOfMaxCabSizeForLargeFileSplitting); |
| 7332 | maximumCabinetSizeForLargeFileSplitting = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Compiler.MinValueOfMaxCabSizeForLargeFileSplitting, Compiler.MaxValueOfMaxCabSizeForLargeFileSplitting); | 7336 | break; |
| 7333 | break; | 7337 | default: |
| 7334 | default: | 7338 | this.Core.UnexpectedAttribute(node, attrib); |
| 7335 | this.Core.UnexpectedAttribute(node, attrib); | 7339 | break; |
| 7336 | break; | ||
| 7337 | } | 7340 | } |
| 7338 | } | 7341 | } |
| 7339 | else | 7342 | else |
| @@ -7397,27 +7400,27 @@ namespace WixToolset.Core | |||
| 7397 | { | 7400 | { |
| 7398 | switch (attrib.Name.LocalName) | 7401 | switch (attrib.Name.LocalName) |
| 7399 | { | 7402 | { |
| 7400 | case "Id": | 7403 | case "Id": |
| 7401 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 7404 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 7402 | break; | 7405 | break; |
| 7403 | case "DiskId": | 7406 | case "DiskId": |
| 7404 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 7407 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 7405 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat)); | 7408 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat)); |
| 7406 | break; | 7409 | break; |
| 7407 | case "FileCompression": | 7410 | case "FileCompression": |
| 7408 | var compress = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7411 | var compress = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7409 | attributes |= compress == YesNoType.Yes ? FileSymbolAttributes.Compressed : 0; | 7412 | attributes |= compress == YesNoType.Yes ? FileSymbolAttributes.Compressed : 0; |
| 7410 | attributes |= compress == YesNoType.No ? FileSymbolAttributes.Uncompressed : 0; | 7413 | attributes |= compress == YesNoType.No ? FileSymbolAttributes.Uncompressed : 0; |
| 7411 | break; | 7414 | break; |
| 7412 | case "Language": | 7415 | case "Language": |
| 7413 | language = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); | 7416 | language = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); |
| 7414 | break; | 7417 | break; |
| 7415 | case "SourceFile": | 7418 | case "SourceFile": |
| 7416 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7419 | sourceFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7417 | break; | 7420 | break; |
| 7418 | default: | 7421 | default: |
| 7419 | this.Core.UnexpectedAttribute(node, attrib); | 7422 | this.Core.UnexpectedAttribute(node, attrib); |
| 7420 | break; | 7423 | break; |
| 7421 | } | 7424 | } |
| 7422 | } | 7425 | } |
| 7423 | else | 7426 | else |
| @@ -7447,19 +7450,19 @@ namespace WixToolset.Core | |||
| 7447 | { | 7450 | { |
| 7448 | switch (child.Name.LocalName) | 7451 | switch (child.Name.LocalName) |
| 7449 | { | 7452 | { |
| 7450 | case "ConfigurationData": | 7453 | case "ConfigurationData": |
| 7451 | if (0 == configData.Length) | 7454 | if (0 == configData.Length) |
| 7452 | { | 7455 | { |
| 7453 | configData = this.ParseConfigurationDataElement(child); | 7456 | configData = this.ParseConfigurationDataElement(child); |
| 7454 | } | 7457 | } |
| 7455 | else | 7458 | else |
| 7456 | { | 7459 | { |
| 7457 | configData = String.Concat(configData, ",", this.ParseConfigurationDataElement(child)); | 7460 | configData = String.Concat(configData, ",", this.ParseConfigurationDataElement(child)); |
| 7458 | } | 7461 | } |
| 7459 | break; | 7462 | break; |
| 7460 | default: | 7463 | default: |
| 7461 | this.Core.UnexpectedElement(node, child); | 7464 | this.Core.UnexpectedElement(node, child); |
| 7462 | break; | 7465 | break; |
| 7463 | } | 7466 | } |
| 7464 | } | 7467 | } |
| 7465 | else | 7468 | else |
| @@ -7577,15 +7580,15 @@ namespace WixToolset.Core | |||
| 7577 | { | 7580 | { |
| 7578 | switch (attrib.Name.LocalName) | 7581 | switch (attrib.Name.LocalName) |
| 7579 | { | 7582 | { |
| 7580 | case "Name": | 7583 | case "Name": |
| 7581 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7584 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7582 | break; | 7585 | break; |
| 7583 | case "Value": | 7586 | case "Value": |
| 7584 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7587 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7585 | break; | 7588 | break; |
| 7586 | default: | 7589 | default: |
| 7587 | this.Core.UnexpectedAttribute(node, attrib); | 7590 | this.Core.UnexpectedAttribute(node, attrib); |
| 7588 | break; | 7591 | break; |
| 7589 | } | 7592 | } |
| 7590 | } | 7593 | } |
| 7591 | else | 7594 | else |
| @@ -7705,16 +7708,16 @@ namespace WixToolset.Core | |||
| 7705 | { | 7708 | { |
| 7706 | switch (attrib.Name.LocalName) | 7709 | switch (attrib.Name.LocalName) |
| 7707 | { | 7710 | { |
| 7708 | case "Id": | 7711 | case "Id": |
| 7709 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 7712 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
| 7710 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixMerge, id); | 7713 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixMerge, id); |
| 7711 | break; | 7714 | break; |
| 7712 | case "Primary": | 7715 | case "Primary": |
| 7713 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7716 | primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7714 | break; | 7717 | break; |
| 7715 | default: | 7718 | default: |
| 7716 | this.Core.UnexpectedAttribute(node, attrib); | 7719 | this.Core.UnexpectedAttribute(node, attrib); |
| 7717 | break; | 7720 | break; |
| 7718 | } | 7721 | } |
| 7719 | } | 7722 | } |
| 7720 | else | 7723 | else |
| @@ -7755,21 +7758,21 @@ namespace WixToolset.Core | |||
| 7755 | { | 7758 | { |
| 7756 | switch (attrib.Name.LocalName) | 7759 | switch (attrib.Name.LocalName) |
| 7757 | { | 7760 | { |
| 7758 | case "Advertise": | 7761 | case "Advertise": |
| 7759 | advertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7762 | advertise = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7760 | break; | 7763 | break; |
| 7761 | case "Class": | 7764 | case "Class": |
| 7762 | classId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 7765 | classId = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 7763 | break; | 7766 | break; |
| 7764 | case "ContentType": | 7767 | case "ContentType": |
| 7765 | contentType = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7768 | contentType = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7766 | break; | 7769 | break; |
| 7767 | case "Default": | 7770 | case "Default": |
| 7768 | returnContentType = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 7771 | returnContentType = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
| 7769 | break; | 7772 | break; |
| 7770 | default: | 7773 | default: |
| 7771 | this.Core.UnexpectedAttribute(node, attrib); | 7774 | this.Core.UnexpectedAttribute(node, attrib); |
| 7772 | break; | 7775 | break; |
| 7773 | } | 7776 | } |
| 7774 | } | 7777 | } |
| 7775 | else | 7778 | else |
| @@ -7843,19 +7846,19 @@ namespace WixToolset.Core | |||
| 7843 | { | 7846 | { |
| 7844 | switch (attrib.Name.LocalName) | 7847 | switch (attrib.Name.LocalName) |
| 7845 | { | 7848 | { |
| 7846 | case "Id": | 7849 | case "Id": |
| 7847 | case "Name": | 7850 | case "Name": |
| 7848 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7851 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7849 | break; | 7852 | break; |
| 7850 | case "Company": | 7853 | case "Company": |
| 7851 | company = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7854 | company = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7852 | break; | 7855 | break; |
| 7853 | case "Value": | 7856 | case "Value": |
| 7854 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7857 | value = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7855 | break; | 7858 | break; |
| 7856 | default: | 7859 | default: |
| 7857 | this.Core.UnexpectedAttribute(node, attrib); | 7860 | this.Core.UnexpectedAttribute(node, attrib); |
| 7858 | break; | 7861 | break; |
| 7859 | } | 7862 | } |
| 7860 | } | 7863 | } |
| 7861 | else | 7864 | else |
| @@ -7929,16 +7932,16 @@ namespace WixToolset.Core | |||
| 7929 | { | 7932 | { |
| 7930 | switch (attrib.Name.LocalName) | 7933 | switch (attrib.Name.LocalName) |
| 7931 | { | 7934 | { |
| 7932 | case "Id": | 7935 | case "Id": |
| 7933 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 7936 | id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 7934 | if (id.Length > 0 && "*" != id) | 7937 | if (id.Length > 0 && "*" != id) |
| 7935 | { | 7938 | { |
| 7936 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 7939 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 7937 | } | 7940 | } |
| 7938 | break; | 7941 | break; |
| 7939 | default: | 7942 | default: |
| 7940 | this.Core.UnexpectedAttribute(node, attrib); | 7943 | this.Core.UnexpectedAttribute(node, attrib); |
| 7941 | break; | 7944 | break; |
| 7942 | } | 7945 | } |
| 7943 | } | 7946 | } |
| 7944 | else | 7947 | else |
| @@ -7973,12 +7976,12 @@ namespace WixToolset.Core | |||
| 7973 | { | 7976 | { |
| 7974 | switch (attrib.Name.LocalName) | 7977 | switch (attrib.Name.LocalName) |
| 7975 | { | 7978 | { |
| 7976 | case "Id": | 7979 | case "Id": |
| 7977 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); | 7980 | id = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); |
| 7978 | break; | 7981 | break; |
| 7979 | default: | 7982 | default: |
| 7980 | this.Core.UnexpectedAttribute(node, attrib); | 7983 | this.Core.UnexpectedAttribute(node, attrib); |
| 7981 | break; | 7984 | break; |
| 7982 | } | 7985 | } |
| 7983 | } | 7986 | } |
| 7984 | else | 7987 | else |
| @@ -8013,12 +8016,12 @@ namespace WixToolset.Core | |||
| 8013 | { | 8016 | { |
| 8014 | switch (attrib.Name.LocalName) | 8017 | switch (attrib.Name.LocalName) |
| 8015 | { | 8018 | { |
| 8016 | case "Path": | 8019 | case "Path": |
| 8017 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8020 | path = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8018 | break; | 8021 | break; |
| 8019 | default: | 8022 | default: |
| 8020 | this.Core.UnexpectedAttribute(node, attrib); | 8023 | this.Core.UnexpectedAttribute(node, attrib); |
| 8021 | break; | 8024 | break; |
| 8022 | } | 8025 | } |
| 8023 | } | 8026 | } |
| 8024 | else | 8027 | else |
| @@ -8057,21 +8060,21 @@ namespace WixToolset.Core | |||
| 8057 | { | 8060 | { |
| 8058 | switch (attrib.Name.LocalName) | 8061 | switch (attrib.Name.LocalName) |
| 8059 | { | 8062 | { |
| 8060 | case "Id": | 8063 | case "Id": |
| 8061 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 8064 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 8062 | break; | 8065 | break; |
| 8063 | case "DiskId": | 8066 | case "DiskId": |
| 8064 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); | 8067 | diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); |
| 8065 | break; | 8068 | break; |
| 8066 | case "BaselineFile": | 8069 | case "BaselineFile": |
| 8067 | baselineFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8070 | baselineFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8068 | break; | 8071 | break; |
| 8069 | case "UpdateFile": | 8072 | case "UpdateFile": |
| 8070 | updateFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8073 | updateFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8071 | break; | 8074 | break; |
| 8072 | default: | 8075 | default: |
| 8073 | this.Core.UnexpectedAttribute(node, attrib); | 8076 | this.Core.UnexpectedAttribute(node, attrib); |
| 8074 | break; | 8077 | break; |
| 8075 | } | 8078 | } |
| 8076 | } | 8079 | } |
| 8077 | else | 8080 | else |
| @@ -8102,21 +8105,21 @@ namespace WixToolset.Core | |||
| 8102 | { | 8105 | { |
| 8103 | switch (child.Name.LocalName) | 8106 | switch (child.Name.LocalName) |
| 8104 | { | 8107 | { |
| 8105 | case "Validate": | 8108 | case "Validate": |
| 8106 | if (parsedValidate) | 8109 | if (parsedValidate) |
| 8107 | { | 8110 | { |
| 8108 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 8111 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
| 8109 | this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); | 8112 | this.Core.Write(ErrorMessages.TooManyChildren(childSourceLineNumbers, node.Name.LocalName, child.Name.LocalName)); |
| 8110 | } | 8113 | } |
| 8111 | else | 8114 | else |
| 8112 | { | 8115 | { |
| 8113 | this.ParseValidateElement(child, ref validationFlags); | 8116 | this.ParseValidateElement(child, ref validationFlags); |
| 8114 | parsedValidate = true; | 8117 | parsedValidate = true; |
| 8115 | } | 8118 | } |
| 8116 | break; | 8119 | break; |
| 8117 | default: | 8120 | default: |
| 8118 | this.Core.UnexpectedElement(node, child); | 8121 | this.Core.UnexpectedElement(node, child); |
| 8119 | break; | 8122 | break; |
| 8120 | } | 8123 | } |
| 8121 | } | 8124 | } |
| 8122 | else | 8125 | else |
| @@ -8155,15 +8158,15 @@ namespace WixToolset.Core | |||
| 8155 | { | 8158 | { |
| 8156 | switch (attrib.Name.LocalName) | 8159 | switch (attrib.Name.LocalName) |
| 8157 | { | 8160 | { |
| 8158 | case "Length": | 8161 | case "Length": |
| 8159 | length = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8162 | length = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8160 | break; | 8163 | break; |
| 8161 | case "Offset": | 8164 | case "Offset": |
| 8162 | offset = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8165 | offset = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8163 | break; | 8166 | break; |
| 8164 | default: | 8167 | default: |
| 8165 | this.Core.UnexpectedAttribute(node, attrib); | 8168 | this.Core.UnexpectedAttribute(node, attrib); |
| 8166 | break; | 8169 | break; |
| 8167 | } | 8170 | } |
| 8168 | } | 8171 | } |
| 8169 | else | 8172 | else |
| @@ -8218,155 +8221,155 @@ namespace WixToolset.Core | |||
| 8218 | { | 8221 | { |
| 8219 | switch (attrib.Name.LocalName) | 8222 | switch (attrib.Name.LocalName) |
| 8220 | { | 8223 | { |
| 8221 | case "ProductId": | 8224 | case "ProductId": |
| 8222 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | 8225 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8223 | { | 8226 | { |
| 8224 | validationFlags |= TransformFlags.ValidateProduct; | 8227 | validationFlags |= TransformFlags.ValidateProduct; |
| 8225 | } | 8228 | } |
| 8226 | else | 8229 | else |
| 8227 | { | 8230 | { |
| 8228 | validationFlags &= ~TransformFlags.ValidateProduct; | 8231 | validationFlags &= ~TransformFlags.ValidateProduct; |
| 8229 | } | 8232 | } |
| 8230 | break; | ||
| 8231 | case "ProductLanguage": | ||
| 8232 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8233 | { | ||
| 8234 | validationFlags |= TransformFlags.ValidateLanguage; | ||
| 8235 | } | ||
| 8236 | else | ||
| 8237 | { | ||
| 8238 | validationFlags &= ~TransformFlags.ValidateLanguage; | ||
| 8239 | } | ||
| 8240 | break; | ||
| 8241 | case "ProductVersion": | ||
| 8242 | var check = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 8243 | validationFlags &= ~TransformFlags.ProductVersionMask; | ||
| 8244 | switch (check) | ||
| 8245 | { | ||
| 8246 | case "Major": | ||
| 8247 | case "major": | ||
| 8248 | validationFlags |= TransformFlags.ValidateMajorVersion; | ||
| 8249 | break; | 8233 | break; |
| 8250 | case "Minor": | 8234 | case "ProductLanguage": |
| 8251 | case "minor": | 8235 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8252 | validationFlags |= TransformFlags.ValidateMinorVersion; | 8236 | { |
| 8237 | validationFlags |= TransformFlags.ValidateLanguage; | ||
| 8238 | } | ||
| 8239 | else | ||
| 8240 | { | ||
| 8241 | validationFlags &= ~TransformFlags.ValidateLanguage; | ||
| 8242 | } | ||
| 8253 | break; | 8243 | break; |
| 8254 | case "Update": | 8244 | case "ProductVersion": |
| 8255 | case "update": | 8245 | var check = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 8256 | validationFlags |= TransformFlags.ValidateUpdateVersion; | 8246 | validationFlags &= ~TransformFlags.ProductVersionMask; |
| 8247 | switch (check) | ||
| 8248 | { | ||
| 8249 | case "Major": | ||
| 8250 | case "major": | ||
| 8251 | validationFlags |= TransformFlags.ValidateMajorVersion; | ||
| 8252 | break; | ||
| 8253 | case "Minor": | ||
| 8254 | case "minor": | ||
| 8255 | validationFlags |= TransformFlags.ValidateMinorVersion; | ||
| 8256 | break; | ||
| 8257 | case "Update": | ||
| 8258 | case "update": | ||
| 8259 | validationFlags |= TransformFlags.ValidateUpdateVersion; | ||
| 8260 | break; | ||
| 8261 | case "": | ||
| 8262 | break; | ||
| 8263 | default: | ||
| 8264 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Version", check, "Major", "Minor", "Update")); | ||
| 8265 | break; | ||
| 8266 | } | ||
| 8257 | break; | 8267 | break; |
| 8258 | case "": | 8268 | case "ProductVersionOperator": |
| 8269 | var op = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 8270 | validationFlags &= ~TransformFlags.ProductVersionOperatorMask; | ||
| 8271 | switch (op) | ||
| 8272 | { | ||
| 8273 | case "Lesser": | ||
| 8274 | case "lesser": | ||
| 8275 | validationFlags |= TransformFlags.ValidateNewLessBaseVersion; | ||
| 8276 | break; | ||
| 8277 | case "LesserOrEqual": | ||
| 8278 | case "lesserOrEqual": | ||
| 8279 | validationFlags |= TransformFlags.ValidateNewLessEqualBaseVersion; | ||
| 8280 | break; | ||
| 8281 | case "Equal": | ||
| 8282 | case "equal": | ||
| 8283 | validationFlags |= TransformFlags.ValidateNewEqualBaseVersion; | ||
| 8284 | break; | ||
| 8285 | case "GreaterOrEqual": | ||
| 8286 | case "greaterOrEqual": | ||
| 8287 | validationFlags |= TransformFlags.ValidateNewGreaterEqualBaseVersion; | ||
| 8288 | break; | ||
| 8289 | case "Greater": | ||
| 8290 | case "greater": | ||
| 8291 | validationFlags |= TransformFlags.ValidateNewGreaterBaseVersion; | ||
| 8292 | break; | ||
| 8293 | case "": | ||
| 8294 | break; | ||
| 8295 | default: | ||
| 8296 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Operator", op, "Lesser", "LesserOrEqual", "Equal", "GreaterOrEqual", "Greater")); | ||
| 8297 | break; | ||
| 8298 | } | ||
| 8259 | break; | 8299 | break; |
| 8260 | default: | 8300 | case "UpgradeCode": |
| 8261 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Version", check, "Major", "Minor", "Update")); | 8301 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8302 | { | ||
| 8303 | validationFlags |= TransformFlags.ValidateUpgradeCode; | ||
| 8304 | } | ||
| 8305 | else | ||
| 8306 | { | ||
| 8307 | validationFlags &= ~TransformFlags.ValidateUpgradeCode; | ||
| 8308 | } | ||
| 8262 | break; | 8309 | break; |
| 8263 | } | 8310 | case "IgnoreAddExistingRow": |
| 8264 | break; | 8311 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8265 | case "ProductVersionOperator": | 8312 | { |
| 8266 | var op = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 8313 | validationFlags |= TransformFlags.ErrorAddExistingRow; |
| 8267 | validationFlags &= ~TransformFlags.ProductVersionOperatorMask; | 8314 | } |
| 8268 | switch (op) | 8315 | else |
| 8269 | { | 8316 | { |
| 8270 | case "Lesser": | 8317 | validationFlags &= ~TransformFlags.ErrorAddExistingRow; |
| 8271 | case "lesser": | 8318 | } |
| 8272 | validationFlags |= TransformFlags.ValidateNewLessBaseVersion; | ||
| 8273 | break; | 8319 | break; |
| 8274 | case "LesserOrEqual": | 8320 | case "IgnoreAddExistingTable": |
| 8275 | case "lesserOrEqual": | 8321 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8276 | validationFlags |= TransformFlags.ValidateNewLessEqualBaseVersion; | 8322 | { |
| 8323 | validationFlags |= TransformFlags.ErrorAddExistingTable; | ||
| 8324 | } | ||
| 8325 | else | ||
| 8326 | { | ||
| 8327 | validationFlags &= ~TransformFlags.ErrorAddExistingTable; | ||
| 8328 | } | ||
| 8277 | break; | 8329 | break; |
| 8278 | case "Equal": | 8330 | case "IgnoreDeleteMissingRow": |
| 8279 | case "equal": | 8331 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8280 | validationFlags |= TransformFlags.ValidateNewEqualBaseVersion; | 8332 | { |
| 8333 | validationFlags |= TransformFlags.ErrorDeleteMissingRow; | ||
| 8334 | } | ||
| 8335 | else | ||
| 8336 | { | ||
| 8337 | validationFlags &= ~TransformFlags.ErrorDeleteMissingRow; | ||
| 8338 | } | ||
| 8281 | break; | 8339 | break; |
| 8282 | case "GreaterOrEqual": | 8340 | case "IgnoreDeleteMissingTable": |
| 8283 | case "greaterOrEqual": | 8341 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8284 | validationFlags |= TransformFlags.ValidateNewGreaterEqualBaseVersion; | 8342 | { |
| 8343 | validationFlags |= TransformFlags.ErrorDeleteMissingTable; | ||
| 8344 | } | ||
| 8345 | else | ||
| 8346 | { | ||
| 8347 | validationFlags &= ~TransformFlags.ErrorDeleteMissingTable; | ||
| 8348 | } | ||
| 8285 | break; | 8349 | break; |
| 8286 | case "Greater": | 8350 | case "IgnoreUpdateMissingRow": |
| 8287 | case "greater": | 8351 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) |
| 8288 | validationFlags |= TransformFlags.ValidateNewGreaterBaseVersion; | 8352 | { |
| 8353 | validationFlags |= TransformFlags.ErrorUpdateMissingRow; | ||
| 8354 | } | ||
| 8355 | else | ||
| 8356 | { | ||
| 8357 | validationFlags &= ~TransformFlags.ErrorUpdateMissingRow; | ||
| 8358 | } | ||
| 8289 | break; | 8359 | break; |
| 8290 | case "": | 8360 | case "IgnoreChangingCodePage": |
| 8361 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8362 | { | ||
| 8363 | validationFlags |= TransformFlags.ErrorChangeCodePage; | ||
| 8364 | } | ||
| 8365 | else | ||
| 8366 | { | ||
| 8367 | validationFlags &= ~TransformFlags.ErrorChangeCodePage; | ||
| 8368 | } | ||
| 8291 | break; | 8369 | break; |
| 8292 | default: | 8370 | default: |
| 8293 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Operator", op, "Lesser", "LesserOrEqual", "Equal", "GreaterOrEqual", "Greater")); | 8371 | this.Core.UnexpectedAttribute(node, attrib); |
| 8294 | break; | 8372 | break; |
| 8295 | } | ||
| 8296 | break; | ||
| 8297 | case "UpgradeCode": | ||
| 8298 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8299 | { | ||
| 8300 | validationFlags |= TransformFlags.ValidateUpgradeCode; | ||
| 8301 | } | ||
| 8302 | else | ||
| 8303 | { | ||
| 8304 | validationFlags &= ~TransformFlags.ValidateUpgradeCode; | ||
| 8305 | } | ||
| 8306 | break; | ||
| 8307 | case "IgnoreAddExistingRow": | ||
| 8308 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8309 | { | ||
| 8310 | validationFlags |= TransformFlags.ErrorAddExistingRow; | ||
| 8311 | } | ||
| 8312 | else | ||
| 8313 | { | ||
| 8314 | validationFlags &= ~TransformFlags.ErrorAddExistingRow; | ||
| 8315 | } | ||
| 8316 | break; | ||
| 8317 | case "IgnoreAddExistingTable": | ||
| 8318 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8319 | { | ||
| 8320 | validationFlags |= TransformFlags.ErrorAddExistingTable; | ||
| 8321 | } | ||
| 8322 | else | ||
| 8323 | { | ||
| 8324 | validationFlags &= ~TransformFlags.ErrorAddExistingTable; | ||
| 8325 | } | ||
| 8326 | break; | ||
| 8327 | case "IgnoreDeleteMissingRow": | ||
| 8328 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8329 | { | ||
| 8330 | validationFlags |= TransformFlags.ErrorDeleteMissingRow; | ||
| 8331 | } | ||
| 8332 | else | ||
| 8333 | { | ||
| 8334 | validationFlags &= ~TransformFlags.ErrorDeleteMissingRow; | ||
| 8335 | } | ||
| 8336 | break; | ||
| 8337 | case "IgnoreDeleteMissingTable": | ||
| 8338 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8339 | { | ||
| 8340 | validationFlags |= TransformFlags.ErrorDeleteMissingTable; | ||
| 8341 | } | ||
| 8342 | else | ||
| 8343 | { | ||
| 8344 | validationFlags &= ~TransformFlags.ErrorDeleteMissingTable; | ||
| 8345 | } | ||
| 8346 | break; | ||
| 8347 | case "IgnoreUpdateMissingRow": | ||
| 8348 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8349 | { | ||
| 8350 | validationFlags |= TransformFlags.ErrorUpdateMissingRow; | ||
| 8351 | } | ||
| 8352 | else | ||
| 8353 | { | ||
| 8354 | validationFlags &= ~TransformFlags.ErrorUpdateMissingRow; | ||
| 8355 | } | ||
| 8356 | break; | ||
| 8357 | case "IgnoreChangingCodePage": | ||
| 8358 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
| 8359 | { | ||
| 8360 | validationFlags |= TransformFlags.ErrorChangeCodePage; | ||
| 8361 | } | ||
| 8362 | else | ||
| 8363 | { | ||
| 8364 | validationFlags &= ~TransformFlags.ErrorChangeCodePage; | ||
| 8365 | } | ||
| 8366 | break; | ||
| 8367 | default: | ||
| 8368 | this.Core.UnexpectedAttribute(node, attrib); | ||
| 8369 | break; | ||
| 8370 | } | 8373 | } |
| 8371 | } | 8374 | } |
| 8372 | else | 8375 | else |
diff --git a/src/wix/WixToolset.Core/Compiler_Bundle.cs b/src/wix/WixToolset.Core/Compiler_Bundle.cs index 49a729db..db49e728 100644 --- a/src/wix/WixToolset.Core/Compiler_Bundle.cs +++ b/src/wix/WixToolset.Core/Compiler_Bundle.cs | |||
| @@ -466,6 +466,20 @@ namespace WixToolset.Core | |||
| 466 | Name = "bundle-attached.cab", | 466 | Name = "bundle-attached.cab", |
| 467 | Type = ContainerType.Attached, | 467 | Type = ContainerType.Attached, |
| 468 | }); | 468 | }); |
| 469 | |||
| 470 | if (!String.IsNullOrEmpty(iconSourceFile)) | ||
| 471 | { | ||
| 472 | var compilerPayload = new CompilerPayload(this.Core, sourceLineNumbers, node) | ||
| 473 | { | ||
| 474 | Id = new Identifier(AccessModifier.Section, "WixBundle.ico"), | ||
| 475 | Name = "WixBundle.ico", | ||
| 476 | SourceFile = iconSourceFile, | ||
| 477 | }; | ||
| 478 | |||
| 479 | compilerPayload.FinishCompilingPayload(Compiler.BurnUXContainerId.Id); | ||
| 480 | |||
| 481 | compilerPayload.CreatePayloadSymbol(ComplexReferenceParentType.Container, Compiler.BurnUXContainerId.Id); | ||
| 482 | } | ||
| 469 | } | 483 | } |
| 470 | } | 484 | } |
| 471 | 485 | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 174df55f..148ba739 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs | |||
| @@ -78,7 +78,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 78 | [Fact] | 78 | [Fact] |
| 79 | public void CanBuildSimpleBundle() | 79 | public void CanBuildSimpleBundle() |
| 80 | { | 80 | { |
| 81 | var folder = TestData.Get(@"TestData\SimpleBundle"); | 81 | var folder = TestData.Get(@"TestData", "SimpleBundle"); |
| 82 | 82 | ||
| 83 | using (var fs = new DisposableFileSystem()) | 83 | using (var fs = new DisposableFileSystem()) |
| 84 | { | 84 | { |
| @@ -96,6 +96,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 96 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), | 96 | "-loc", Path.Combine(folder, "Bundle.en-us.wxl"), |
| 97 | "-bindpath", Path.Combine(folder, "data"), | 97 | "-bindpath", Path.Combine(folder, "data"), |
| 98 | "-intermediateFolder", intermediateFolder, | 98 | "-intermediateFolder", intermediateFolder, |
| 99 | "-bindpath", Path.Combine(folder, "data"), | ||
| 99 | "-o", exePath, | 100 | "-o", exePath, |
| 100 | }); | 101 | }); |
| 101 | 102 | ||
| @@ -172,6 +173,12 @@ namespace WixToolsetTest.CoreIntegration | |||
| 172 | }, registrationElements); | 173 | }, registrationElements); |
| 173 | 174 | ||
| 174 | var ignoreAttributesByElementName = new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } }; | 175 | var ignoreAttributesByElementName = new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } }; |
| 176 | var iconPayloads = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:UX/burn:Payload[@Id='WixBundle.ico']", ignoreAttributesByElementName); | ||
| 177 | WixAssert.CompareLineByLine( | ||
| 178 | [ | ||
| 179 | "<Payload Id='WixBundle.ico' FilePath='WixBundle.ico' SourcePath='u1' />", | ||
| 180 | ], iconPayloads); | ||
| 181 | |||
| 175 | var msiPayloads = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Payload[@Id='test.msi']", ignoreAttributesByElementName); | 182 | var msiPayloads = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Payload[@Id='test.msi']", ignoreAttributesByElementName); |
| 176 | WixAssert.CompareLineByLine(new[] | 183 | WixAssert.CompareLineByLine(new[] |
| 177 | { | 184 | { |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs index c132eb80..ca5f869d 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs | |||
| @@ -163,6 +163,45 @@ namespace WixToolsetTest.CoreIntegration | |||
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | [Fact] | 165 | [Fact] |
| 166 | public void CanGetAnonymousDirectories() | ||
| 167 | { | ||
| 168 | var folder = TestData.Get("TestData"); | ||
| 169 | |||
| 170 | using (var fs = new DisposableFileSystem()) | ||
| 171 | { | ||
| 172 | var baseFolder = fs.GetFolder(); | ||
| 173 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 174 | var wixlibPath = Path.Combine(baseFolder, "bin", "test.msi"); | ||
| 175 | |||
| 176 | var result = WixRunner.Execute( | ||
| 177 | [ | ||
| 178 | "build", | ||
| 179 | "-arch", "x64", | ||
| 180 | Path.Combine(folder, "Directory", "AnonymousDirectories.wxs"), | ||
| 181 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | ||
| 182 | "-intermediateFolder", intermediateFolder, | ||
| 183 | "-o", wixlibPath | ||
| 184 | ]); | ||
| 185 | |||
| 186 | result.AssertSuccess(); | ||
| 187 | |||
| 188 | var pdb = WindowsInstallerData.Load(Path.Combine(baseFolder, "bin", "test.wixpdb")); | ||
| 189 | var directoryRows = pdb.Tables["Directory"].Rows; | ||
| 190 | |||
| 191 | var dirs = directoryRows.Select(d => d.ToString()).OrderBy(s => s).ToArray(); | ||
| 192 | WixAssert.CompareLineByLine( | ||
| 193 | [ | ||
| 194 | @"DesktopFolder/TARGETDIR/Desktop", | ||
| 195 | @"dHKac23vLoBC5fFrqxqAIybMFOj0/DesktopFolder/a", | ||
| 196 | @"dKom2ks4onBH9RsYLDhjge71s7s8/dlvpu0ovv8DWWVrdCVSYzDfsibzg/c", | ||
| 197 | @"dlvpu0ovv8DWWVrdCVSYzDfsibzg/dHKac23vLoBC5fFrqxqAIybMFOj0/b", | ||
| 198 | @"SomeFolder/TARGETDIR/fef2brvc|Some Folder", | ||
| 199 | @"TARGETDIR//SourceDir" | ||
| 200 | ], dirs); | ||
| 201 | } | ||
| 202 | } | ||
| 203 | |||
| 204 | [Fact] | ||
| 166 | public void CanGetDefaultName() | 205 | public void CanGetDefaultName() |
| 167 | { | 206 | { |
| 168 | var folder = TestData.Get(@"TestData"); | 207 | var folder = TestData.Get(@"TestData"); |
| @@ -293,9 +332,9 @@ namespace WixToolsetTest.CoreIntegration | |||
| 293 | var directoryRows = data.Tables["Directory"].Rows; | 332 | var directoryRows = data.Tables["Directory"].Rows; |
| 294 | WixAssert.CompareLineByLine(new[] | 333 | WixAssert.CompareLineByLine(new[] |
| 295 | { | 334 | { |
| 296 | "d4EceYatXTyy8HXPt5B6DT9Rj.wE:ProgramFilesFolder:u7-b4gch|Example Corporation", | 335 | "dwGveZhe5wcMbbRyRAkRwm2sqnE4:ProgramFilesFolder:u7-b4gch|Example Corporation", |
| 297 | "dSJ1pgiASlW7kJTu0wqsGBklJsS0:d4EceYatXTyy8HXPt5B6DT9Rj.wE:vjj-gxay|Test Product", | 336 | "d8kPFuRMPxdOxfpYS0O8azlhLUpY:dwGveZhe5wcMbbRyRAkRwm2sqnE4:vjj-gxay|Test Product", |
| 298 | "BinFolder:dSJ1pgiASlW7kJTu0wqsGBklJsS0:bin", | 337 | "BinFolder:d8kPFuRMPxdOxfpYS0O8azlhLUpY:bin", |
| 299 | "ProgramFilesFolder:TARGETDIR:PFiles", | 338 | "ProgramFilesFolder:TARGETDIR:PFiles", |
| 300 | "TARGETDIR::SourceDir" | 339 | "TARGETDIR::SourceDir" |
| 301 | }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).ToArray()); | 340 | }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).ToArray()); |
| @@ -386,9 +425,9 @@ namespace WixToolsetTest.CoreIntegration | |||
| 386 | var directoryRows = data.Tables["Directory"].Rows; | 425 | var directoryRows = data.Tables["Directory"].Rows; |
| 387 | WixAssert.CompareLineByLine(new[] | 426 | WixAssert.CompareLineByLine(new[] |
| 388 | { | 427 | { |
| 389 | @"d1nVb5_zcCwRCz7i2YXNAofGRmfc:ProgramFilesFolder:a", | 428 | @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:dvFwapipzsdDBjHbM5DUi_2llN.k:c", |
| 390 | @"dijlG.bNicFgvj1_DujiGg9EBGrQ:d1nVb5_zcCwRCz7i2YXNAofGRmfc:b", | 429 | @"dvFwapipzsdDBjHbM5DUi_2llN.k:dyJuT.V6E4sWuHVv3CZiBNvrX2Lo:b", |
| 391 | @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:dijlG.bNicFgvj1_DujiGg9EBGrQ:c", | 430 | @"dyJuT.V6E4sWuHVv3CZiBNvrX2Lo:ProgramFilesFolder:a", |
| 392 | "ProgramFilesFolder:TARGETDIR:PFiles", | 431 | "ProgramFilesFolder:TARGETDIR:PFiles", |
| 393 | "TARGETDIR::SourceDir" | 432 | "TARGETDIR::SourceDir" |
| 394 | }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).OrderBy(s => s).ToArray()); | 433 | }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).OrderBy(s => s).ToArray()); |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs index 8dc135eb..3c7342ce 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/LanguageFixture.cs | |||
| @@ -56,13 +56,13 @@ namespace WixToolsetTest.CoreIntegration | |||
| 56 | 56 | ||
| 57 | var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); | 57 | var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); |
| 58 | var directoryRows = data.Tables["Directory"].Rows; | 58 | var directoryRows = data.Tables["Directory"].Rows; |
| 59 | WixAssert.CompareLineByLine(new[] | 59 | WixAssert.CompareLineByLine( |
| 60 | { | 60 | [ |
| 61 | "d4EceYatXTyy8HXPt5B6DT9Rj.wE:u7-b4gch|Example Corporation", | 61 | "dwGveZhe5wcMbbRyRAkRwm2sqnE4:ProgramFilesFolder:u7-b4gch|Example Corporation", |
| 62 | "INSTALLFOLDER:oekcr5lq|MsiPackage", | 62 | "INSTALLFOLDER:dwGveZhe5wcMbbRyRAkRwm2sqnE4:oekcr5lq|MsiPackage", |
| 63 | "ProgramFilesFolder:PFiles", | 63 | "ProgramFilesFolder:TARGETDIR:PFiles", |
| 64 | "TARGETDIR:SourceDir" | 64 | "TARGETDIR::SourceDir" |
| 65 | }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(2)).ToArray()); | 65 | ], [.. directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2))]); |
| 66 | } | 66 | } |
| 67 | } | 67 | } |
| 68 | 68 | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/AnonymousDirectories.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/AnonymousDirectories.wxs new file mode 100644 index 00000000..4c25fed0 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/AnonymousDirectories.wxs | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
| 3 | <Package Id="WixToolsetTest.TestPackage" Name="~RedundantSubdirectories" Version="1.0.0.0" Manufacturer="Example Corporation" Compressed="no"> | ||
| 4 | <ComponentGroupRef Id="Files" /> | ||
| 5 | |||
| 6 | <Directory Id="SomeFolder" Name="Some Folder" /> | ||
| 7 | </Package> | ||
| 8 | |||
| 9 | <Fragment> | ||
| 10 | <ComponentGroup Id="Files"> | ||
| 11 | <Component Directory="SomeFolder"> | ||
| 12 | <File Source="test.txt" KeyPath="yes"> | ||
| 13 | <Shortcut Id="Shortcut1" Name="Test Shortcut" Directory="DesktopFolder" Subdirectory="a\b\c" Advertise="yes" /> | ||
| 14 | </File> | ||
| 15 | |||
| 16 | <RemoveFolder Id="RemoveAFolder" Directory="DesktopFolder" Subdirectory="a" On="uninstall" /> | ||
| 17 | <RemoveFolder Id="RemoveBFolder" Directory="DesktopFolder" Subdirectory="a\b" On="uninstall" /> | ||
| 18 | <RemoveFolder Id="RemoveCFolder" Directory="DesktopFolder" Subdirectory="a\b\c" On="uninstall" /> | ||
| 19 | </Component> | ||
| 20 | </ComponentGroup> | ||
| 21 | </Fragment> | ||
| 22 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs index cda76252..47b7e88e 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/Bundle.wxs | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | 1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> |
| 2 | <Bundle Name="!(loc.BundleName)" InProgressName="!(loc.BundleInProgressName)" Version="!(bind.packageVersion.test.msi)" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | 2 | <Bundle Name="!(loc.BundleName)" Manufacturer="Example Corporation" Version="!(bind.packageVersion.test.msi)" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a" |
| 3 | InProgressName="!(loc.BundleInProgressName)" IconSourceFile="test.ico"> | ||
| 3 | <BootstrapperApplication SourceFile="fakeba.dll" /> | 4 | <BootstrapperApplication SourceFile="fakeba.dll" /> |
| 4 | 5 | ||
| 5 | <Chain> | 6 | <Chain> |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/data/test.ico b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/data/test.ico new file mode 100644 index 00000000..906ce324 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/SimpleBundle/data/test.ico | |||
| Binary files differ | |||
diff --git a/src/xsd/bal.xsd b/src/xsd/bal.xsd index ff4142ad..59c1f91e 100644 --- a/src/xsd/bal.xsd +++ b/src/xsd/bal.xsd | |||
| @@ -623,6 +623,21 @@ | |||
| 623 | </xs:simpleType> | 623 | </xs:simpleType> |
| 624 | </xs:attribute> | 624 | </xs:attribute> |
| 625 | 625 | ||
| 626 | <xs:attribute name="DisplayFilesInUseDialogCondition" type="xs:string"> | ||
| 627 | <xs:annotation> | ||
| 628 | <xs:documentation> | ||
| 629 | Specifies whether the bundle allows the Files In Use dialog to be displayed for the MSI or MSP package. If not | ||
| 630 | specified (the default) or the condition evaluates to true, the Files In Use dialog prompts the user during full | ||
| 631 | bundle UI to close applications to release the file. Otherwise, the dialog is not displayed and the package might | ||
| 632 | require a restart when files are in use. | ||
| 633 | </xs:documentation> | ||
| 634 | <xs:appinfo> | ||
| 635 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="MsiPackage" /> | ||
| 636 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="MspPackage" /> | ||
| 637 | </xs:appinfo> | ||
| 638 | </xs:annotation> | ||
| 639 | </xs:attribute> | ||
| 640 | |||
| 626 | <xs:attribute name="DisplayInternalUICondition" type="xs:string"> | 641 | <xs:attribute name="DisplayInternalUICondition" type="xs:string"> |
| 627 | <xs:annotation> | 642 | <xs:annotation> |
| 628 | <xs:documentation> | 643 | <xs:documentation> |
