Registry and environment #11

Closed
opened 2026-10-14 01:26:55 -05:00 by jeff · 1 comment
Owner

Parent

Part of #1

What to build

RegistryKey and RegistryValue write keys and values of each type WiX documents, under each root; Environment sets, appends to or prepends to an environment variable, so a command-line program's directory can go on PATH.

Acceptance criteria

  • Seam 1 tests assert the Registry and Environment rows for each value type, root and action.
  • VM test: after a Wine install, wine reg query finds each value with its type and data, and the environment variable has the directory appended; after uninstall they are gone.
  • VM test: the tables match the reference implementation's with generated columns masked.
## Parent Part of #1 ## What to build `RegistryKey` and `RegistryValue` write keys and values of each type WiX documents, under each root; `Environment` sets, appends to or prepends to an environment variable, so a command-line program's directory can go on `PATH`. ## Acceptance criteria - [ ] Seam 1 tests assert the `Registry` and `Environment` rows for each value type, root and action. - [ ] VM test: after a Wine install, `wine reg query` finds each value with its type and data, and the environment variable has the directory appended; after uninstall they are gone. - [ ] VM test: the tables match the reference implementation's with generated columns masked.
jeff self-assigned this 2026-10-14 04:20:49 -05:00
Author
Owner

Done in 3e3576f; CI run 9 is green.

  • Registry:
    • every value type: string, with a leading # escaped as ##; integer #; expandable #%; binary #x; and multiString, written with [~] and taking append and prepend;
    • every root, with the root and key inherited from enclosing RegistryKeys;
    • the +, - and * rows that create and remove a key;
    • a registry key path, with the component's registry bit set and a generated GUID derived from it.
  • Environment: the =, +, !, - and * prefixes and [~] parts, as Microsoft documents the table.
  • Seam 1: a test for each of the above.
  • End to end: the registry fixture's tables match wixl's, apart from the masked Ids and two corrections in .wixl-errata. Under Wine, every value in registry.registry is written on install and removed on uninstall, environment variables included, for both x86 and x64.

Where the reference implementation departs from Microsoft's documentation:

  • It ends every registry key with a backslash.
  • It leaves the - prefix off a variable that isn't Permanent, so with wixl that variable outlives an uninstall.
  • It has no MultiStringValue.
  • It gives Environment rows a new random Id on every build.
Done in 3e3576f; CI run 9 is green. - **Registry:** - every value type: string, with a leading `#` escaped as `##`; integer `#`; expandable `#%`; binary `#x`; and multiString, written with `[~]` and taking append and prepend; - every root, with the root and key inherited from enclosing `RegistryKey`s; - the `+`, `-` and `*` rows that create and remove a key; - a registry key path, with the component's registry bit set and a generated GUID derived from it. - **Environment:** the `=`, `+`, `!`, `-` and `*` prefixes and `[~]` parts, as Microsoft documents the table. - **Seam 1:** a test for each of the above. - **End to end:** the `registry` fixture's tables match wixl's, apart from the masked Ids and two corrections in `.wixl-errata`. Under Wine, every value in `registry.registry` is written on install and removed on uninstall, environment variables included, for both x86 and x64. Where the reference implementation departs from Microsoft's documentation: - It ends every registry key with a backslash. - It leaves the `-` prefix off a variable that isn't `Permanent`, so with wixl that variable outlives an uninstall. - It has no `MultiStringValue`. - It gives Environment rows a new random Id on every build.
jeff closed this issue 2026-10-14 05:03:55 -05:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
jeff/zixl#11
No description provided.