| @@ -147,7 +147,23 @@ function Get-ComponentRegistrationMode { | |||||
| if ($absentCount -eq $Components.Count) { return 'Absent' } | if ($absentCount -eq $Components.Count) { return 'Absent' } | ||||
| if ($ownedCount -eq $Components.Count) { return 'Owned' } | if ($ownedCount -eq $Components.Count) { return 'Owned' } | ||||
| throw 'Component registrations are a mixture of absent and existing entries. Refusing a deployment that could overwrite or delete unrelated registry state.' | |||||
| # An upgrade may introduce a component that did not exist in the currently | |||||
| # deployed tree. Accept only that additive case: every existing registration | |||||
| # was proven project-owned above, and every absent registration must also | |||||
| # have no corresponding component file in the old release. An absent | |||||
| # registration for an old file remains a suspicious partial state. | |||||
| foreach ($component in $Components) { | |||||
| $progIdKey = "HKLM:\SOFTWARE\Classes\$($component.ProgId)" | |||||
| $clsidKey = "HKLM:\SOFTWARE\Classes\CLSID\$($component.ClassId)" | |||||
| if (-not (Test-Path -LiteralPath $progIdKey) -and -not (Test-Path -LiteralPath $clsidKey)) { | |||||
| $oldComponentPath = Join-Path $ExistingProjectPath $component.RelativePath | |||||
| if (Test-Path -LiteralPath $oldComponentPath) { | |||||
| throw "Component registration for existing file '$($component.RelativePath)' is absent. Refusing to repair a partial registration state." | |||||
| } | |||||
| } | |||||
| } | |||||
| return 'Owned' | |||||
| } | } | ||||
| function Restore-SiteState { | function Restore-SiteState { | ||||
| @@ -259,6 +275,7 @@ $components = @( | |||||
| [PSCustomObject]@{ RelativePath = 'Framework\RequestContext.wsc'; ProgId = 'WscMvc.RequestContext'; ClassId = '{1C36FA55-34DF-4974-94B9-D657389362B2}' }, | [PSCustomObject]@{ RelativePath = 'Framework\RequestContext.wsc'; ProgId = 'WscMvc.RequestContext'; ClassId = '{1C36FA55-34DF-4974-94B9-D657389362B2}' }, | ||||
| [PSCustomObject]@{ RelativePath = 'Framework\Router.wsc'; ProgId = 'WscMvc.Router'; ClassId = '{C92F9338-B478-4EAD-B865-892FFB1E1C51}' }, | [PSCustomObject]@{ RelativePath = 'Framework\Router.wsc'; ProgId = 'WscMvc.Router'; ClassId = '{C92F9338-B478-4EAD-B865-892FFB1E1C51}' }, | ||||
| [PSCustomObject]@{ RelativePath = 'Framework\ViewRenderer.wsc'; ProgId = 'WscMvc.ViewRenderer'; ClassId = '{4948DF84-5DC6-448A-9F1B-EB596C28842B}' }, | [PSCustomObject]@{ RelativePath = 'Framework\ViewRenderer.wsc'; ProgId = 'WscMvc.ViewRenderer'; ClassId = '{4948DF84-5DC6-448A-9F1B-EB596C28842B}' }, | ||||
| [PSCustomObject]@{ RelativePath = 'Framework\Database.wsc'; ProgId = 'WscMvc.Database'; ClassId = '{E3F7C1A2-9B4D-4E6F-8C3A-2D5B7A9E1F04}' }, | |||||
| [PSCustomObject]@{ RelativePath = 'Framework\Application.wsc'; ProgId = 'WscMvc.Application'; ClassId = '{851C7763-1638-42FE-A166-BF3DD3A96A88}' }, | [PSCustomObject]@{ RelativePath = 'Framework\Application.wsc'; ProgId = 'WscMvc.Application'; ClassId = '{851C7763-1638-42FE-A166-BF3DD3A96A88}' }, | ||||
| [PSCustomObject]@{ RelativePath = 'Controllers\HomeController.wsc'; ProgId = 'WscMvc.HomeController'; ClassId = '{87488446-60BE-4068-8368-0B709BB68F3F}' }, | [PSCustomObject]@{ RelativePath = 'Controllers\HomeController.wsc'; ProgId = 'WscMvc.HomeController'; ClassId = '{87488446-60BE-4068-8368-0B709BB68F3F}' }, | ||||
| [PSCustomObject]@{ RelativePath = 'test-app\Controllers\SelfTestController.wsc'; ProgId = 'WscMvc.SelfTestController'; ClassId = '{D2634944-4646-4C55-956E-4C05E7E10904}' } | [PSCustomObject]@{ RelativePath = 'test-app\Controllers\SelfTestController.wsc'; ProgId = 'WscMvc.SelfTestController'; ClassId = '{D2634944-4646-4C55-956E-4C05E7E10904}' } | ||||
| @@ -313,6 +330,7 @@ try { | |||||
| 'public\Default.asp', | 'public\Default.asp', | ||||
| 'test-app\public\Default.asp', | 'test-app\public\Default.asp', | ||||
| 'Framework\ViewRenderer.wsc', | 'Framework\ViewRenderer.wsc', | ||||
| 'Framework\Database.wsc', | |||||
| 'tools\Register-Components.ps1', | 'tools\Register-Components.ps1', | ||||
| 'tools\Setup-Site.ps1', | 'tools\Setup-Site.ps1', | ||||
| 'tests\Invoke-SelfTest.ps1', | 'tests\Invoke-SelfTest.ps1', | ||||
Powered by TurnKey Linux.