[codex] fix Windows installer backend cleanup#85
[codex] fix Windows installer backend cleanup#85zouyonghe merged 12 commits intoAstrBotDevs:mainfrom
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request resolves a critical bug in the Windows installer that prevented proper cleanup of the backend Python process during updates and reinstalls. By correcting the path lookup for the cleanup script and adding regression tests, this change ensures a smoother and more reliable installation experience for users. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request effectively resolves a critical issue in the Windows installer's backend cleanup process by correcting the path used to locate the kill-backend-processes.ps1 script. The change ensures that the bundled Python process is properly terminated during upgrades and reinstalls, preventing file-in-use errors. Additionally, robust test cases have been added to validate the cleanup script's scope and the NSIS hook's script lookup order, significantly improving the installer's reliability and preventing future regressions.
There was a problem hiding this comment.
Hey - 我留下了一些整体层面的反馈:
- 针对 NSIS hook 和 PowerShell 脚本的新测试过于依赖精确的字符串模式(包括使用
doesNotMatch的负向匹配检查),这在将来可能会比较脆弱;建议将断言更多地聚焦在更高层次的行为或更稳定的子串上,而不是完整的命令行以及不相关标记是否不存在。 - NSIS hook 中将
"$INSTDIR\_up_\resources\kill-backend-processes.ps1"写死了;如果这种更新器目录结构会在多个地方使用,建议将该路径集中管理,或者清晰地文档化这一约定,以避免在更新器结构变化时出现不一致。
给 AI 代理的提示
Please address the comments from this code review:
## Overall Comments
- The new tests for the NSIS hook and PowerShell script are tightly coupled to exact string patterns (including negative `doesNotMatch` checks), which may be brittle over time; consider focusing assertions on higher-level behaviors or more stable substrings rather than full command lines and absence of unrelated tokens.
- The NSIS hook hardcodes `"$INSTDIR\_up_\resources\kill-backend-processes.ps1"`; if this updater layout is used in multiple places, consider centralizing this path or documenting its contract to avoid future divergence when the updater structure changes.帮我变得更有用!请在每条评论上点击 👍 或 👎,我会根据你的反馈改进后续的代码审查。
Original comment in English
Hey - I've left some high level feedback:
- The new tests for the NSIS hook and PowerShell script are tightly coupled to exact string patterns (including negative
doesNotMatchchecks), which may be brittle over time; consider focusing assertions on higher-level behaviors or more stable substrings rather than full command lines and absence of unrelated tokens. - The NSIS hook hardcodes
"$INSTDIR\_up_\resources\kill-backend-processes.ps1"; if this updater layout is used in multiple places, consider centralizing this path or documenting its contract to avoid future divergence when the updater structure changes.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The new tests for the NSIS hook and PowerShell script are tightly coupled to exact string patterns (including negative `doesNotMatch` checks), which may be brittle over time; consider focusing assertions on higher-level behaviors or more stable substrings rather than full command lines and absence of unrelated tokens.
- The NSIS hook hardcodes `"$INSTDIR\_up_\resources\kill-backend-processes.ps1"`; if this updater layout is used in multiple places, consider centralizing this path or documenting its contract to avoid future divergence when the updater structure changes.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我在这里留下了一些高层次的反馈:
- 测试
nsis installer hook looks for the install-root cleanup script before updater fallback目前只断言了两个路径都存在,而没有断言它们的先后顺序;如果你确实想锁定查找顺序,可以考虑对这两个字符串在文件中的索引位置进行断言。 - NSIS hook 的测试匹配的是非常具体的
StrCpy行,这在面对无害的重构(例如新增标志或空白字符)时可能比较脆弱;你可以让这些正则表达式稍微灵活一些,同时仍然保证断言的是相同的行为。
给 AI Agent 的提示
Please address the comments from this code review:
## Overall Comments
- The test `nsis installer hook looks for the install-root cleanup script before updater fallback` currently only asserts both paths exist and not their order; if you truly want to lock lookup order, consider asserting on the index positions of the two strings in the file.
- The NSIS hook test matches very specific `StrCpy` lines, which may be brittle to harmless refactors (e.g., additional flags or whitespace); you might make the regexes a bit more flexible while still asserting the same behavior.帮我变得更有用!请在每条评论上点击 👍 或 👎,我会根据你的反馈改进后续的评审。
Original comment in English
Hey - I've left some high level feedback:
- The test
nsis installer hook looks for the install-root cleanup script before updater fallbackcurrently only asserts both paths exist and not their order; if you truly want to lock lookup order, consider asserting on the index positions of the two strings in the file. - The NSIS hook test matches very specific
StrCpylines, which may be brittle to harmless refactors (e.g., additional flags or whitespace); you might make the regexes a bit more flexible while still asserting the same behavior.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The test `nsis installer hook looks for the install-root cleanup script before updater fallback` currently only asserts both paths exist and not their order; if you truly want to lock lookup order, consider asserting on the index positions of the two strings in the file.
- The NSIS hook test matches very specific `StrCpy` lines, which may be brittle to harmless refactors (e.g., additional flags or whitespace); you might make the regexes a bit more flexible while still asserting the same behavior.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我在这里给出了一些整体性的反馈:
nsis installer hook looks for the install-root cleanup script before updater fallback这个测试依赖原始文件文本中通过indexOf得到的顺序判断,这种方式有点脆弱;可以考虑基于宏结构进行断言,或者使用更有针对性的正则表达式,在容忍格式变化的同时,仍然保证查找顺序的约束。- NSIS hook 和测试里硬编码的 PowerShell 脚本路径可以集中到一处(例如共享常量或一个小的辅助方法),这样未来路径变更时就不需要手动修改多个调用点。
供 AI 代理使用的提示词
Please address the comments from this code review:
## Overall Comments
- `nsis installer hook looks for the install-root cleanup script before updater fallback` 这个测试依赖原始文件文本中通过 `indexOf` 得到的顺序判断,这种方式有点脆弱;可以考虑基于宏结构进行断言,或者使用更有针对性的正则表达式,在容忍格式变化的同时,仍然保证查找顺序的约束。
- NSIS hook 和测试里硬编码的 PowerShell 脚本路径可以集中到一处(例如共享常量或一个小的辅助方法),这样未来路径变更时就不需要手动修改多个调用点。帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据你的反馈持续改进评审质量。
Original comment in English
Hey - I've left some high level feedback:
- The
nsis installer hook looks for the install-root cleanup script before updater fallbacktest relies onindexOfordering in the raw file text, which is a bit brittle; consider asserting on macro structure or using more targeted regexes to tolerate formatting changes while still enforcing lookup order. - The hard-coded PowerShell script paths in both the NSIS hook and the tests could be centralized (e.g., shared constants or a small helper) so that future path changes don’t require updating multiple call sites manually.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The `nsis installer hook looks for the install-root cleanup script before updater fallback` test relies on `indexOf` ordering in the raw file text, which is a bit brittle; consider asserting on macro structure or using more targeted regexes to tolerate formatting changes while still enforcing lookup order.
- The hard-coded PowerShell script paths in both the NSIS hook and the tests could be centralized (e.g., shared constants or a small helper) so that future path changes don’t require updating multiple call sites manually.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我发现了 2 个问题
面向 AI 代理的提示词
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="16-20" />
<code_context>
+ return value.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
+}
+
+function extractNsisMacroBody(source, macroName) {
+ const match = source.match(new RegExp(`!macro\\s+${escapeRegex(macroName)}([\\s\\S]*?)!macroend`));
+ assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
</code_context>
<issue_to_address>
**suggestion (bug_risk):** 收紧宏提取的正则表达式,避免意外的部分匹配,并简化模式。
当前的模式会匹配任何名称中包含 `macroName` 子串的 `!macro`,并依赖 `[\s\S]*?` 跨行匹配,这可能导致错误匹配。比如,在搜索 `NSIS_RUN_BACKEND_CLEANUP` 时,`NSIS_RUN_BACKEND_CLEANUP_EXTRA` 也会被匹配到。
为了让其更安全、更清晰,可以考虑:
- 使用单词边界锚定宏名:`!macro\s+${escapeRegex(macroName)}\b`。
- 使用 `m` 和 `s` 标志配合更简单的主体模式:`new RegExp(`^!macro\s+${escapeRegex(macroName)}\b([\s\S]*?)^!macroend`, 'ms')`。
这可以减少意外的部分匹配,并且在同一文件中存在多个宏时更健壮。
```suggestion
function extractNsisMacroBody(source, macroName) {
const match = source.match(
new RegExp(
`^!macro\\s+${escapeRegex(macroName)}\\b([\\s\\S]*?)^!macroend`,
'ms',
),
);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1];
}
```
</issue_to_address>
### Comment 2
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="12" />
<code_context>
+const installRootCleanupPath = '$INSTDIR\\kill-backend-processes.ps1';
+const updaterFallbackCleanupPath = '$INSTDIR\\_up_\\resources\\kill-backend-processes.ps1';
+
+function escapeRegex(value) {
+ return value.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
+}
</code_context>
<issue_to_address>
**issue (complexity):** 建议用直接的字面量检查和更简单的字符串解析来替换大量使用正则的辅助函数,使这些测试更易读、更易维护。
你可以通过更简单、更直接的字符串/行检查来保持相同的覆盖率,并避免这些重度依赖正则的辅助方法。
### 1. 对常量去掉 `escapeRegex` / 动态 `RegExp`
既然 define 和路径都是你控制的常量,字面量正则会更易读、更容易理解:
```js
// Before
assert.match(
source,
new RegExp(
`!define\\s+${escapeRegex(nsisPrimaryCleanupDefine)}\\s+"${escapeRegex(installRootCleanupPath)}"`
)
);
// After
assert.match(
source,
/!define\s+ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\s+"\$INSTDIR\\kill-backend-processes\.ps1"/
);
```
回退路径也同理:
```js
assert.match(
source,
/!define\s+ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\s+"\$INSTDIR\\_up_\\resources\\kill-backend-processes\.ps1"/
);
```
这样就可以完全移除 `escapeRegex`。
### 2. 将 `extractNsisMacroBody` 简化为基于行的解析
宏边界是非常明确的标记;你不需要“匹配一切”的正则表达式:
```js
// Before
function extractNsisMacroBody(source, macroName) {
const match = source.match(new RegExp(`!macro\\s+${escapeRegex(macroName)}([\\s\\S]*?)!macroend`));
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1];
}
// After
function extractNsisMacroBody(source, macroName) {
const startMarker = `!macro ${macroName}`;
const endMarker = '!macroend';
const startIdx = source.indexOf(startMarker);
assert.ok(startIdx !== -1, `Expected NSIS macro ${macroName} to exist`);
const bodyStart = startIdx + startMarker.length;
const endIdx = source.indexOf(endMarker, bodyStart);
assert.ok(endIdx !== -1, `Expected end of NSIS macro ${macroName}`);
return source.slice(bodyStart, endIdx);
}
```
这能保持原有功能,但更容易理解,而且对正则的依赖更少、不那么脆弱。
### 3. 拆分密集的宏行为 `RegExp`
与其用一个长而拼接的模式,不如在宏主体上按顺序断言关键行为。例如:
```js
// Before
assert.match(
macroBody,
new RegExp(
`StrCpy\\s+\\$1\\s+"\\$\\{${escapeRegex(nsisPrimaryCleanupDefine)}\\}"[\\s\\S]*?` +
`IfFileExists\\s+"\\$1"\\s+\\+2\\s+0[\\s\\S]*?` +
`StrCpy\\s+\\$1\\s+"\\$\\{${escapeRegex(nsisFallbackCleanupDefine)}\\}"`
)
);
// After
assert.match(
macroBody,
/StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\}"/
);
assert.match(
macroBody,
/IfFileExists\s+"\$1"\s+\+2\s+0/
);
assert.match(
macroBody,
/StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\}"/
);
// Optional: ensure ordering via positions
const primaryIdx = macroBody.indexOf('StrCpy $1 "${ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT}"');
const ifIdx = macroBody.indexOf('IfFileExists "$1" +2 0');
const fallbackIdx = macroBody.indexOf('StrCpy $1 "${ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK}"');
assert.ok(primaryIdx !== -1 && ifIdx !== -1 && fallbackIdx !== -1);
assert.ok(primaryIdx < ifIdx && ifIdx < fallbackIdx);
```
这在保持相同行为保证(主路径、存在性检查、回退路径以及顺序)的同时,显著降低了测试的理解负担。
</issue_to_address>帮我变得更有用!请在每条评论上点击 👍 或 👎,我会根据你的反馈改进之后的评审。
Original comment in English
Hey - I've found 2 issues
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="16-20" />
<code_context>
+ return value.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
+}
+
+function extractNsisMacroBody(source, macroName) {
+ const match = source.match(new RegExp(`!macro\\s+${escapeRegex(macroName)}([\\s\\S]*?)!macroend`));
+ assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Tighten the macro-extraction regex to avoid accidental partial matches and simplify the pattern.
The current pattern matches any `!macro` whose name contains `macroName` as a substring and relies on `[\s\S]*?` to span lines, which can lead to incorrect matches. For example, `NSIS_RUN_BACKEND_CLEANUP_EXTRA` would match when searching for `NSIS_RUN_BACKEND_CLEANUP`.
To make this safer and clearer, consider:
- Anchoring the name with a word boundary: `!macro\s+${escapeRegex(macroName)}\b`.
- Using `m` and `s` flags with a simpler body pattern: `new RegExp(`^!macro\s+${escapeRegex(macroName)}\b([\s\S]*?)^!macroend`, 'ms')`.
This reduces accidental partial matches and is more robust when multiple macros are present in the same file.
```suggestion
function extractNsisMacroBody(source, macroName) {
const match = source.match(
new RegExp(
`^!macro\\s+${escapeRegex(macroName)}\\b([\\s\\S]*?)^!macroend`,
'ms',
),
);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1];
}
```
</issue_to_address>
### Comment 2
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="12" />
<code_context>
+const installRootCleanupPath = '$INSTDIR\\kill-backend-processes.ps1';
+const updaterFallbackCleanupPath = '$INSTDIR\\_up_\\resources\\kill-backend-processes.ps1';
+
+function escapeRegex(value) {
+ return value.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
+}
</code_context>
<issue_to_address>
**issue (complexity):** Consider replacing the regex-heavy helpers with direct, literal checks and simpler string parsing to keep these tests easier to read and maintain.
You can keep the same coverage with simpler, more direct string/line checks and avoid the regex-heavy helpers.
### 1. Drop `escapeRegex` / dynamic `RegExp` for constants
Since the defines and paths are constants you control, literal regexes are easier to read and reason about:
```js
// Before
assert.match(
source,
new RegExp(
`!define\\s+${escapeRegex(nsisPrimaryCleanupDefine)}\\s+"${escapeRegex(installRootCleanupPath)}"`
)
);
// After
assert.match(
source,
/!define\s+ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\s+"\$INSTDIR\\kill-backend-processes\.ps1"/
);
```
Same for the fallback:
```js
assert.match(
source,
/!define\s+ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\s+"\$INSTDIR\\_up_\\resources\\kill-backend-processes\.ps1"/
);
```
With this, you can remove `escapeRegex` entirely.
### 2. Simplify `extractNsisMacroBody` to line-based parsing
The macro boundaries are clear markers; you don’t need a “match everything” regex:
```js
// Before
function extractNsisMacroBody(source, macroName) {
const match = source.match(new RegExp(`!macro\\s+${escapeRegex(macroName)}([\\s\\S]*?)!macroend`));
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1];
}
// After
function extractNsisMacroBody(source, macroName) {
const startMarker = `!macro ${macroName}`;
const endMarker = '!macroend';
const startIdx = source.indexOf(startMarker);
assert.ok(startIdx !== -1, `Expected NSIS macro ${macroName} to exist`);
const bodyStart = startIdx + startMarker.length;
const endIdx = source.indexOf(endMarker, bodyStart);
assert.ok(endIdx !== -1, `Expected end of NSIS macro ${macroName}`);
return source.slice(bodyStart, endIdx);
}
```
This keeps functionality but is easier to follow and less regex‑brittle.
### 3. Break up the dense macro behavior `RegExp`
Instead of one long stitched pattern, assert key behaviors in sequence on the macro body. For example:
```js
// Before
assert.match(
macroBody,
new RegExp(
`StrCpy\\s+\\$1\\s+"\\$\\{${escapeRegex(nsisPrimaryCleanupDefine)}\\}"[\\s\\S]*?` +
`IfFileExists\\s+"\\$1"\\s+\\+2\\s+0[\\s\\S]*?` +
`StrCpy\\s+\\$1\\s+"\\$\\{${escapeRegex(nsisFallbackCleanupDefine)}\\}"`
)
);
// After
assert.match(
macroBody,
/StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\}"/
);
assert.match(
macroBody,
/IfFileExists\s+"\$1"\s+\+2\s+0/
);
assert.match(
macroBody,
/StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\}"/
);
// Optional: ensure ordering via positions
const primaryIdx = macroBody.indexOf('StrCpy $1 "${ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT}"');
const ifIdx = macroBody.indexOf('IfFileExists "$1" +2 0');
const fallbackIdx = macroBody.indexOf('StrCpy $1 "${ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK}"');
assert.ok(primaryIdx !== -1 && ifIdx !== -1 && fallbackIdx !== -1);
assert.ok(primaryIdx < ifIdx && ifIdx < fallbackIdx);
```
This keeps the same behavioral guarantees (primary path, existence check, fallback path, ordering) but substantially reduces mental overhead in the tests.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我在这里给出了一些整体性的反馈:
- NSIS 宏解析辅助函数
extractNsisMacroBody假设宏声明行严格为!macro <name>,没有参数也没有行尾注释;建议将判断放宽为使用startsWith('!macro ' + macroName),以避免将来宏签名扩展时导致的兼容性问题。 - 在 NSIS hook 中,通过对精确字符串执行
indexOf来断言特定的StrCpy行,这种写法比较脆弱;你可以考虑改用基于正则的检查,或者在提取出的宏体中搜索模式,从而在仍然保证查找顺序的前提下,更好地容忍无害的空白或格式变更。
给 AI Agent 的提示
Please address the comments from this code review:
## Overall Comments
- The NSIS macro parsing helper `extractNsisMacroBody` assumes the macro declaration line is exactly `!macro <name>` with no parameters or trailing comments; consider relaxing this to `startsWith('!macro ' + macroName)` to avoid future breakage if the macro signature is extended.
- The test asserting specific `StrCpy` lines via `indexOf` on exact strings in the NSIS hook is quite brittle; you could instead use regex-based checks or search for patterns within the extracted macro body to tolerate benign whitespace or formatting changes while still enforcing the lookup order.帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据你的反馈改进之后的审查。
Original comment in English
Hey - I've left some high level feedback:
- The NSIS macro parsing helper
extractNsisMacroBodyassumes the macro declaration line is exactly!macro <name>with no parameters or trailing comments; consider relaxing this tostartsWith('!macro ' + macroName)to avoid future breakage if the macro signature is extended. - The test asserting specific
StrCpylines viaindexOfon exact strings in the NSIS hook is quite brittle; you could instead use regex-based checks or search for patterns within the extracted macro body to tolerate benign whitespace or formatting changes while still enforcing the lookup order.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The NSIS macro parsing helper `extractNsisMacroBody` assumes the macro declaration line is exactly `!macro <name>` with no parameters or trailing comments; consider relaxing this to `startsWith('!macro ' + macroName)` to avoid future breakage if the macro signature is extended.
- The test asserting specific `StrCpy` lines via `indexOf` on exact strings in the NSIS hook is quite brittle; you could instead use regex-based checks or search for patterns within the extracted macro body to tolerate benign whitespace or formatting changes while still enforcing the lookup order.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我发现了 1 个问题,并留下了一些整体性反馈:
windows-installer-cleanup-script.test.mjs中的 NSIS 宏解析辅助函数假设了一个没有嵌套的简单!macro/!macroend结构;如果这个文件将来变得更复杂,建议收紧结束标记的搜索方式(例如追踪嵌套深度,或按宏名限定作用域),以避免不小心跨越到后续的宏中。NSIS_RUN_BACKEND_CLEANUP的测试依赖于对 define 和StrCpy顺序的精确字符串/正则匹配;为了在未来重构时不那么脆弱,你可以把查找顺序的断言抽象出来,更多地关注相对顺序和宏的使用情况,而不是完整的字面路径和空白字符。
给 AI 代理的提示
Please address the comments from this code review:
## Overall Comments
- The NSIS macro parsing helpers in `windows-installer-cleanup-script.test.mjs` assume a simple `!macro`/`!macroend` structure with no nesting; if this file grows more complex, consider tightening the end-marker search (e.g., tracking nesting depth or scoping by macro name) to avoid accidentally spanning into subsequent macros.
- The tests for `NSIS_RUN_BACKEND_CLEANUP` rely on exact string/regex matches for the defines and `StrCpy` order; to make future refactors less brittle, you might factor the lookup-order assertions to focus on relative ordering and macro usage rather than the full literal paths and whitespace.
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="21" />
<code_context>
+
+ assert.notEqual(startIdx, -1, `Expected NSIS macro ${macroName} to exist`);
+
+ const endIdx = lines.findIndex((line, index) => index > startIdx && line.trim() === '!macroend');
+
+ assert.notEqual(endIdx, -1, `Expected end of NSIS macro ${macroName}`);
</code_context>
<issue_to_address>
**suggestion:** Make `extractNsisMacroBody` more tolerant of `!macroend` formatting.
This equality check will miss valid `!macroend` lines that include comments, extra whitespace, or different casing (e.g. `!macroend ; end`). To better match NSIS behavior and avoid brittle failures, consider something like `line.trim().toLowerCase().startsWith('!macroend')`, optionally allowing trailing comments.
```suggestion
const endIdx = lines.findIndex((line, index) => {
if (index <= startIdx) return false;
const normalizedLine = line.trim().toLowerCase();
return normalizedLine.startsWith('!macroend');
});
```
</issue_to_address>帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据你的反馈改进后续的 Review。
Original comment in English
Hey - I've found 1 issue, and left some high level feedback:
- The NSIS macro parsing helpers in
windows-installer-cleanup-script.test.mjsassume a simple!macro/!macroendstructure with no nesting; if this file grows more complex, consider tightening the end-marker search (e.g., tracking nesting depth or scoping by macro name) to avoid accidentally spanning into subsequent macros. - The tests for
NSIS_RUN_BACKEND_CLEANUPrely on exact string/regex matches for the defines andStrCpyorder; to make future refactors less brittle, you might factor the lookup-order assertions to focus on relative ordering and macro usage rather than the full literal paths and whitespace.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The NSIS macro parsing helpers in `windows-installer-cleanup-script.test.mjs` assume a simple `!macro`/`!macroend` structure with no nesting; if this file grows more complex, consider tightening the end-marker search (e.g., tracking nesting depth or scoping by macro name) to avoid accidentally spanning into subsequent macros.
- The tests for `NSIS_RUN_BACKEND_CLEANUP` rely on exact string/regex matches for the defines and `StrCpy` order; to make future refactors less brittle, you might factor the lookup-order assertions to focus on relative ordering and macro usage rather than the full literal paths and whitespace.
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="21" />
<code_context>
+
+ assert.notEqual(startIdx, -1, `Expected NSIS macro ${macroName} to exist`);
+
+ const endIdx = lines.findIndex((line, index) => index > startIdx && line.trim() === '!macroend');
+
+ assert.notEqual(endIdx, -1, `Expected end of NSIS macro ${macroName}`);
</code_context>
<issue_to_address>
**suggestion:** Make `extractNsisMacroBody` more tolerant of `!macroend` formatting.
This equality check will miss valid `!macroend` lines that include comments, extra whitespace, or different casing (e.g. `!macroend ; end`). To better match NSIS behavior and avoid brittle failures, consider something like `line.trim().toLowerCase().startsWith('!macroend')`, optionally allowing trailing comments.
```suggestion
const endIdx = lines.findIndex((line, index) => {
if (index <= startIdx) return false;
const normalizedLine = line.trim().toLowerCase();
return normalizedLine.startsWith('!macroend');
});
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我在这里给出一些整体性的反馈:
- 现在的
parseNsisDefines辅助函数只匹配使用双引号的 define 值;如果将来你的 NSIS 钩子里出现未加引号或使用单引号的值,这些情况会被静默忽略。所以建议稍微泛化一下正则表达式,或者在看起来像!define的行却没有匹配到时加一个断言。 - 用来检查
nsExec::ExecToLog的测试目前使用的是startsWith("nsExec::ExecToLog '"),这对空白字符和格式的变化非常敏感;改用类似/nsExec::ExecToLog/这样的正则,可以保留测试意图,同时让它在未来的修改中不那么脆弱。
供 AI Agent 使用的提示词
Please address the comments from this code review:
## Overall Comments
- The `parseNsisDefines` helper currently only matches double-quoted define values; if your NSIS hooks ever introduce unquoted or single-quoted values this will silently miss them, so consider slightly generalizing the regex or adding an assertion when a line looks like a `!define` but doesn’t match.
- The test that checks for `nsExec::ExecToLog` uses `startsWith("nsExec::ExecToLog '")`, which is quite sensitive to whitespace/formatting changes; using a regex like `/nsExec::ExecToLog/` would keep the intent while making the test less brittle to future edits.帮我变得更有用!请在每条评论上点击 👍 或 👎,我会根据你的反馈改进后续的代码审查。
Original comment in English
Hey - I've left some high level feedback:
- The
parseNsisDefineshelper currently only matches double-quoted define values; if your NSIS hooks ever introduce unquoted or single-quoted values this will silently miss them, so consider slightly generalizing the regex or adding an assertion when a line looks like a!definebut doesn’t match. - The test that checks for
nsExec::ExecToLogusesstartsWith("nsExec::ExecToLog '"), which is quite sensitive to whitespace/formatting changes; using a regex like/nsExec::ExecToLog/would keep the intent while making the test less brittle to future edits.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The `parseNsisDefines` helper currently only matches double-quoted define values; if your NSIS hooks ever introduce unquoted or single-quoted values this will silently miss them, so consider slightly generalizing the regex or adding an assertion when a line looks like a `!define` but doesn’t match.
- The test that checks for `nsExec::ExecToLog` uses `startsWith("nsExec::ExecToLog '")`, which is quite sensitive to whitespace/formatting changes; using a regex like `/nsExec::ExecToLog/` would keep the intent while making the test less brittle to future edits.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我发现了 2 个问题
用于 AI 代理的提示词
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8-17" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startMarker = `!macro ${macroName}`;
+ const startIdx = lines.findIndex((line) => {
+ const normalizedLine = line.trimStart();
</code_context>
<issue_to_address>
**suggestion (bug_risk):** 宏起始标记的检测是区分大小写的,而宏结束标记的检测是不区分大小写的。
结束标记是通过 `toLowerCase().startsWith('!macroend')` 匹配的,但起始标记使用的是区分大小写的 `!macro`。由于 NSIS 指令通常是不区分大小写的,像 `!MACRO` 或 `!Macro` 会被忽略,而 `!macroend` 仍然能被找到。请同样对起始匹配进行大小写规范化,这样这个辅助函数在指令大小写任意变化时都能正常工作。
```suggestion
function extractNsisMacroBody(source, macroName) {
const lines = source.split('\n');
const startMarker = `!macro ${macroName}`;
const startMarkerLower = startMarker.toLowerCase();
const startIdx = lines.findIndex((line) => {
const normalizedLine = line.trimStart();
const normalizedLower = normalizedLine.toLowerCase();
return (
normalizedLower.startsWith(startMarkerLower) &&
(normalizedLine.length === startMarker.length || /\s/.test(normalizedLine[startMarker.length]))
);
});
```
</issue_to_address>
### Comment 2
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="35-42" />
<code_context>
+ return lines.findIndex((line) => pattern.test(line));
+}
+
+function parseNsisDefines(source) {
+ const defines = new Map();
+
+ for (const line of source.split('\n')) {
+ const trimmedLine = line.trim();
+ const match = trimmedLine.match(/^!define\s+(\S+)\s+(?:"([^"]+)"|'([^']+)'|(\S+))/);
+
+ if (trimmedLine.startsWith('!define ') && !match) {
+ assert.fail(`Expected NSIS define line to be parseable: ${trimmedLine}`);
+ }
</code_context>
<issue_to_address>
**issue:** 当前的 define 解析器在处理没有值的 `!define` 指令或更复杂的写法时会失败。
该正则只会解析带有非空值的 `!define` 行,并且对于任何其他形式的 `!define` 都会触发断言。NSIS 支持无值和更复杂形式的 define,因此今后对 `nsis-installer-hooks.nsh` 做出某些本来合法的修改,可能会导致这些测试开始失败。为避免这种情况,可以放宽断言逻辑:要么跳过那些不符合你所需的简单 `name + value` 形态的 `!define` 行,要么只对特定的 define(例如按名称)应用断言。
</issue_to_address>帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据反馈改进后续评审。
Original comment in English
Hey - I've found 2 issues
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8-17" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startMarker = `!macro ${macroName}`;
+ const startIdx = lines.findIndex((line) => {
+ const normalizedLine = line.trimStart();
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Macro start detection is case-sensitive while macro end detection is case-insensitive.
The end marker is matched with `toLowerCase().startsWith('!macroend')`, but the start marker uses a case-sensitive `!macro`. Since NSIS directives are typically case-insensitive, `!MACRO` or `!Macro` would be ignored while `!macroend` is still found. Please normalize the case for the start match as well so the helper works regardless of directive casing.
```suggestion
function extractNsisMacroBody(source, macroName) {
const lines = source.split('\n');
const startMarker = `!macro ${macroName}`;
const startMarkerLower = startMarker.toLowerCase();
const startIdx = lines.findIndex((line) => {
const normalizedLine = line.trimStart();
const normalizedLower = normalizedLine.toLowerCase();
return (
normalizedLower.startsWith(startMarkerLower) &&
(normalizedLine.length === startMarker.length || /\s/.test(normalizedLine[startMarker.length]))
);
});
```
</issue_to_address>
### Comment 2
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="35-42" />
<code_context>
+ return lines.findIndex((line) => pattern.test(line));
+}
+
+function parseNsisDefines(source) {
+ const defines = new Map();
+
+ for (const line of source.split('\n')) {
+ const trimmedLine = line.trim();
+ const match = trimmedLine.match(/^!define\s+(\S+)\s+(?:"([^"]+)"|'([^']+)'|(\S+))/);
+
+ if (trimmedLine.startsWith('!define ') && !match) {
+ assert.fail(`Expected NSIS define line to be parseable: ${trimmedLine}`);
+ }
</code_context>
<issue_to_address>
**issue:** Current define parser will fail on value-less `!define` directives or more complex forms.
The regex only parses `!define` lines with a non-empty value and asserts on any other `!define`. NSIS supports valueless and more complex defines, so a future valid change to `nsis-installer-hooks.nsh` could start failing these tests. To avoid that, either relax the assertion to skip `!define` lines that don’t match the simple `name + value` shape you need, or restrict the assertion to specific defines (e.g., by name).
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我在这里给了一些整体性的反馈:
- 在
extractNsisMacroBody中,建议让对!macroend的检测对行内注释或额外的标记更加健壮(例如!macroend ; comment),这样以后对 NSIS 文件的修改就不会轻易把解析器弄坏。 parseNsisDefines中的正则表达式假设!define的形式比较简单;如果你预计未来会出现多 token 或宏展开后的值,可能需要要么收紧对输入形态的预期(并将其文档化),要么在遇到不支持的形式时明确失败,这样测试会以更明显的方式报错。
给 AI Agent 的提示
Please address the comments from this code review:
## Overall Comments
- 在 `extractNsisMacroBody` 中,建议让对 `!macroend` 的检测对行内注释或额外的标记更加健壮(例如 `!macroend ; comment`),这样以后对 NSIS 文件的修改就不会轻易把解析器弄坏。
- `parseNsisDefines` 中的正则表达式假设 `!define` 的形式比较简单;如果你预计未来会出现多 token 或宏展开后的值,可能需要要么收紧对输入形态的预期(并将其文档化),要么在遇到不支持的形式时明确失败,这样测试会以更明显的方式报错。帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据你的反馈改进后续的 review。
Original comment in English
Hey - I've left some high level feedback:
- In
extractNsisMacroBody, consider making the!macroenddetection robust against inline comments or additional tokens (e.g.,!macroend ; comment) so future edits to the NSIS file don’t accidentally break the parser. - The regex in
parseNsisDefinesassumes a simple!defineshape; if you expect multi-token or macro-expanded values in the future, it may be worth either tightening the expectations (and documenting them) or explicitly failing when encountering unsupported forms so the tests fail loudly.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- In `extractNsisMacroBody`, consider making the `!macroend` detection robust against inline comments or additional tokens (e.g., `!macroend ; comment`) so future edits to the NSIS file don’t accidentally break the parser.
- The regex in `parseNsisDefines` assumes a simple `!define` shape; if you expect multi-token or macro-expanded values in the future, it may be worth either tightening the expectations (and documenting them) or explicitly failing when encountering unsupported forms so the tests fail loudly.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
SourceryAI
left a comment
There was a problem hiding this comment.
Hey - 我已经审查了你的更改,看起来非常不错!
Hi @zouyonghe! 👋
感谢你通过评论 @sourcery-ai review 来试用 Sourcery!🚀
安装 sourcery-ai 机器人,即可在每个拉取请求上自动获得代码审查 ✨
帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据你的反馈改进我的审查。Original comment in English
Hey - I've reviewed your changes and they look great!
Hi @zouyonghe! 👋
Thanks for trying out Sourcery by commenting with @sourcery-ai review! 🚀
Install the sourcery-ai bot to get automatic code reviews on every pull request ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.|
@sourcery-ai review |
There was a problem hiding this comment.
Hey - 我发现了 1 个问题
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startMarker = `!macro ${macroName}`;
</code_context>
<issue_to_address>
**issue (complexity):** 请考虑简化 NSIS 解析辅助函数和顺序断言,以减少分支、定制索引辅助方法,并让测试阅读起来更加线性。
在保持相同断言/行为的前提下,可以简化部分解析逻辑和索引计算。
### 1. 移除 `findMatchingLineIndex` 并避免索引来回切换
目前使用三个独立索引加一个辅助函数,会让测试更难快速理解。你可以用拼接后的字符串加 `indexOf` 来断言相对顺序,这依然很明确,但更简单一些:
```js
test('nsis installer hook looks for the install-root cleanup script before updater fallback', async () => {
const source = await readFile(hookPath, 'utf8');
const macroBody = extractNsisMacroBody(source, 'NSIS_RUN_BACKEND_CLEANUP');
const bodyText = macroBody.join('\n');
const primaryPattern = /StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\}"/;
const fileExistsPattern = /IfFileExists\s+"\$1"\s+\+2\s+0/;
const fallbackPattern = /StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\}"/;
const primaryIdx = bodyText.search(primaryPattern);
const fileExistsIdx = bodyText.search(fileExistsPattern);
const fallbackIdx = bodyText.search(fallbackPattern);
assert.ok(primaryIdx !== -1);
assert.ok(fileExistsIdx !== -1);
assert.ok(fallbackIdx !== -1);
assert.ok(primaryIdx < fileExistsIdx && fileExistsIdx < fallbackIdx);
assert.ok(/nsExec::ExecToLog/.test(bodyText));
});
```
这样可以完全去掉 `findMatchingLineIndex`,并让整体流程更像是“在这个宏文本中找到这三个元素并检查它们的顺序”,而不是构建一个迷你索引器。
### 2. 用一个针对性的正则来简化 `getNsisDefineValue`
你可以保留“简单字面值 / 无空格”的约束以及对引号的处理,但减少循环内部的分支。使用一个既强制简单值又能移除可选引号的正则,会更容易理解:
```js
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
`^!define\\s+${defineName}\\s+("([^"\\s]+)"|'([^'\\s]+)'|([^"'\n\\s]+))$`,
'i'
);
for (const line of source.split('\n')) {
const match = line.trim().match(definePattern);
if (!match) continue;
// one of groups 2, 3, or 4 contains the value, all of which exclude spaces
const value = match[2] ?? match[3] ?? match[4];
if (!value) {
throw new Error(`Expected NSIS define ${defineName} to have a simple literal value`);
}
return value;
}
return undefined;
}
```
这样依然可以:
- 支持带引号和不带引号的值;
- 拒绝包含空格的值(由正则本身保证);
- 在语法不受支持时抛出相同的错误信息;
- 继续逐行扫描文件。
### 3.(可选)稍微收紧 `extractNsisMacroBody`
如果你不期待同一个宏被定义多次,可以在保留你显式测试的特性(大小写不敏感的 `!macro`、允许带注释的 `!macroend`)的同时,简化一些通用处理逻辑:
```js
function extractNsisMacroBody(source, macroName) {
const lines = source.split('\n');
const startPattern = new RegExp(`^\\s*!macro\\s+${macroName}(?:\\s|$)`, 'i');
const endPattern = /^\s*!macroend\b/i;
const startIdx = lines.findIndex(line => startPattern.test(line));
assert.notEqual(startIdx, -1, `Expected NSIS macro ${macroName} to exist`);
const endIdx = lines.findIndex((line, idx) => idx > startIdx && endPattern.test(line));
assert.notEqual(endIdx, -1, `Expected end of NSIS macro ${macroName}`);
return lines.slice(startIdx + 1, endIdx).map(line => line.trim());
}
```
这仍然保留了你正在断言的行为(大小写不敏感的 `!macro`,以及带注释的 `!macroend`),但读起来更直接:就是“找到起始行,找到结束行,返回中间的行”,不再需要额外的 lowercasing/长度检查。
</issue_to_address>帮我变得更有用!请在每条评论上点击 👍 或 👎,我会利用你的反馈来改进之后的评审。
Original comment in English
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startMarker = `!macro ${macroName}`;
</code_context>
<issue_to_address>
**issue (complexity):** Consider simplifying the NSIS parsing helpers and ordering assertions to reduce branching, custom index helpers, and make the tests read more linearly.
You can keep the same assertions/behavior while simplifying some of the parsing and index math.
### 1. Drop `findMatchingLineIndex` and avoid index juggling
The three separate indices plus a helper make the test harder to scan. You can assert the relative order with a joined string and `indexOf`, which is still explicit but simpler:
```js
test('nsis installer hook looks for the install-root cleanup script before updater fallback', async () => {
const source = await readFile(hookPath, 'utf8');
const macroBody = extractNsisMacroBody(source, 'NSIS_RUN_BACKEND_CLEANUP');
const bodyText = macroBody.join('\n');
const primaryPattern = /StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_INSTALL_ROOT\}"/;
const fileExistsPattern = /IfFileExists\s+"\$1"\s+\+2\s+0/;
const fallbackPattern = /StrCpy\s+\$1\s+"\$\{ASTRBOT_BACKEND_CLEANUP_SCRIPT_UPDATER_FALLBACK\}"/;
const primaryIdx = bodyText.search(primaryPattern);
const fileExistsIdx = bodyText.search(fileExistsPattern);
const fallbackIdx = bodyText.search(fallbackPattern);
assert.ok(primaryIdx !== -1);
assert.ok(fileExistsIdx !== -1);
assert.ok(fallbackIdx !== -1);
assert.ok(primaryIdx < fileExistsIdx && fileExistsIdx < fallbackIdx);
assert.ok(/nsExec::ExecToLog/.test(bodyText));
});
```
This removes `findMatchingLineIndex` entirely and makes the flow read more like “find these three things in this macro text and check their order” instead of building a mini indexer.
### 2. Simplify `getNsisDefineValue` with a single targeted regex
You can keep the “simple literal value / no spaces” constraint and quote handling but reduce branching inside the loop. A single regex that enforces a simple value and then strips optional quotes is easier to follow:
```js
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
`^!define\\s+${defineName}\\s+("([^"\\s]+)"|'([^'\\s]+)'|([^"'\n\\s]+))$`,
'i'
);
for (const line of source.split('\n')) {
const match = line.trim().match(definePattern);
if (!match) continue;
// one of groups 2, 3, or 4 contains the value, all of which exclude spaces
const value = match[2] ?? match[3] ?? match[4];
if (!value) {
throw new Error(`Expected NSIS define ${defineName} to have a simple literal value`);
}
return value;
}
return undefined;
}
```
This still:
- Supports quoted and unquoted values.
- Rejects values with spaces (by construction of the regex).
- Throws the same error message when the syntax is unsupported.
- Continues to scan the file line-by-line.
### 3. (Optional) Narrow `extractNsisMacroBody` slightly
If you don’t expect multiple definitions of the same macro, you can avoid some of the generic handling while keeping the case-insensitivity and `!macroend` comment tolerance you’re explicitly testing:
```js
function extractNsisMacroBody(source, macroName) {
const lines = source.split('\n');
const startPattern = new RegExp(`^\\s*!macro\\s+${macroName}(?:\\s|$)`, 'i');
const endPattern = /^\s*!macroend\b/i;
const startIdx = lines.findIndex(line => startPattern.test(line));
assert.notEqual(startIdx, -1, `Expected NSIS macro ${macroName} to exist`);
const endIdx = lines.findIndex((line, idx) => idx > startIdx && endPattern.test(line));
assert.notEqual(endIdx, -1, `Expected end of NSIS macro ${macroName}`);
return lines.slice(startIdx + 1, endIdx).map(line => line.trim());
}
```
This keeps the behavior you’re asserting (case-insensitive `!macro`, `!macroend` with comments) but reads a bit more directly as “find start line, find end line, return inner lines” without extra lowercasing/length checks.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@sourcery-ai review |
SourceryAI
left a comment
There was a problem hiding this comment.
Hey - 我已经查看了你的更改,一切看起来都很棒!
Hi @zouyonghe! 👋
感谢你通过评论 @sourcery-ai review 来试用 Sourcery!🚀
安装 sourcery-ai 机器人,即可在每个 pull request 上获得自动代码审查 ✨
帮我变得更有用吧!请在每条评论上点击 👍 或 👎,我会根据你的反馈来改进我的审查质量。Original comment in English
Hey - I've reviewed your changes and they look great!
Hi @zouyonghe! 👋
Thanks for trying out Sourcery by commenting with @sourcery-ai review! 🚀
Install the sourcery-ai bot to get automatic code reviews on every pull request ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.There was a problem hiding this comment.
Hey - 我已经查看了你的修改,看起来非常不错!
帮我变得更有用!请在每条评论上点选 👍 或 👎,我会根据你的反馈来改进之后的审查。
Original comment in English
Hey - I've reviewed your changes and they look great!
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
SourceryAI
left a comment
There was a problem hiding this comment.
Hey - 我发现了 1 个问题
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startPattern = new RegExp(`^\\s*!macro\\s+${macroName}(?:\\s|$)`, 'i');
</code_context>
<issue_to_address>
**issue (complexity):** 建议重构这两个 NSIS 辅助函数,让每个函数都只使用一个有良好文档说明的正则,而不是采用多步扫描和多个模式。
你可以保留当前全部行为,同时通过让每个辅助函数只使用一个明确、有注释的正则,来简化实现,并避免“双索引 / 双正则”两次遍历。
### 1. 简化 `extractNsisMacroBody`
你不需要手动拆分并搜索两次;对于这些测试,一个非贪婪的宏体捕获就足够了:
```js
function extractNsisMacroBody(source, macroName) {
const macroPattern = new RegExp(
String.raw`\b!macro\s+${macroName}\b([\s\S]*?)^\s*!macroend\b`,
'im'
);
const match = source.match(macroPattern);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1]
.split('\n')
.map((line) => line.trim())
.filter((line) => line.length > 0); // keep if you want to ignore blank lines
}
```
这样可以保留:
- 通过 `i` 实现对 `!macro` / `!macroend` 的大小写不敏感匹配。
- 通过 `[\s\S]*?` 和 `m` 支持多行宏体。
- “宏必须存在”的断言。
### 2. 简化 `getNsisDefineValue`
你可以把原来的两个模式合并成一个,既负责找到对应的 define,又同时保证其值是“简单字面量”;然后根据是否捕获到值来决定是否抛出异常:
```js
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
String.raw`^\s*!define\s+${defineName}` +
String.raw`\s*(?:"([^"\s]+)"|'([^'\s]+)'|([^"' \t\r\n]+))?\s*$`,
'i'
);
for (const line of source.split('\n')) {
const trimmed = line.trim();
const match = trimmed.match(definePattern);
if (!match) continue;
const value = match[1] ?? match[2] ?? match[3];
if (!value) {
throw new Error(
`Expected NSIS define ${defineName} to have a simple literal value`
);
}
return value;
}
return undefined;
}
```
这样可以保留:
- 每个辅助函数只使用 **一个** 正则。
- 对目标 define 的检测(大小写不敏感)。
- 支持双引号、单引号或不带引号的字面量。
- 当匹配到的 `!define` 不具有简单字面量值(例如有额外标记)时,清晰的报错路径。
</issue_to_address>Hi @zouyonghe! 👋
感谢你通过评论 @sourcery-ai review 来试用 Sourcery!🚀
安装 sourcery-ai bot 以在每个 Pull Request 上自动获得代码审查 ✨
帮我变得更有用!请在每条评论上点击 👍 或 👎,我会根据你的反馈改进后续的审查。Original comment in English
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="scripts/ci/windows-installer-cleanup-script.test.mjs" line_range="8" />
<code_context>
const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url);
+const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url);
+
+function extractNsisMacroBody(source, macroName) {
+ const lines = source.split('\n');
+ const startPattern = new RegExp(`^\\s*!macro\\s+${macroName}(?:\\s|$)`, 'i');
</code_context>
<issue_to_address>
**issue (complexity):** Consider refactoring both NSIS helper functions to use a single, well-documented regex each instead of multi-step scanning and multiple patterns.
You can keep all current behavior while simplifying both helpers to use a single, clearly documented regex each and avoid the double‑index / double‑regex passes.
### 1. Simplify `extractNsisMacroBody`
You don’t need to manually split and search twice; a single non‑greedy macro‑body capture is enough for these tests:
```js
function extractNsisMacroBody(source, macroName) {
const macroPattern = new RegExp(
String.raw`\b!macro\s+${macroName}\b([\s\S]*?)^\s*!macroend\b`,
'im'
);
const match = source.match(macroPattern);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1]
.split('\n')
.map((line) => line.trim())
.filter((line) => line.length > 0); // keep if you want to ignore blank lines
}
```
This preserves:
- Case‑insensitive `!macro` / `!macroend` via `i`.
- Multi‑line bodies via `[\s\S]*?` and `m`.
- The “macro must exist” assertion.
### 2. Simplify `getNsisDefineValue`
You can collapse the two patterns into one that both finds the define and enforces the “simple literal value” constraint, then use the presence/absence of a captured value to decide whether to throw:
```js
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
String.raw`^\s*!define\s+${defineName}` +
String.raw`\s*(?:"([^"\s]+)"|'([^'\s]+)'|([^"' \t\r\n]+))?\s*$`,
'i'
);
for (const line of source.split('\n')) {
const trimmed = line.trim();
const match = trimmed.match(definePattern);
if (!match) continue;
const value = match[1] ?? match[2] ?? match[3];
if (!value) {
throw new Error(
`Expected NSIS define ${defineName} to have a simple literal value`
);
}
return value;
}
return undefined;
}
```
This keeps:
- Only a **single** regex per helper.
- Detection of the target define (case‑insensitive).
- Support for double‑quoted, single‑quoted, or bare literals.
- The clear error path when a matching `!define` doesn’t have a simple literal value (e.g. extra tokens).
</issue_to_address>Hi @zouyonghe! 👋
Thanks for trying out Sourcery by commenting with @sourcery-ai review! 🚀
Install the sourcery-ai bot to get automatic code reviews on every pull request ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.| const scriptPath = new URL('../../src-tauri/windows/kill-backend-processes.ps1', import.meta.url); | ||
| const hookPath = new URL('../../src-tauri/windows/nsis-installer-hooks.nsh', import.meta.url); | ||
|
|
||
| function extractNsisMacroBody(source, macroName) { |
There was a problem hiding this comment.
issue (complexity): 建议重构这两个 NSIS 辅助函数,让每个函数都只使用一个有良好文档说明的正则,而不是采用多步扫描和多个模式。
你可以保留当前全部行为,同时通过让每个辅助函数只使用一个明确、有注释的正则,来简化实现,并避免“双索引 / 双正则”两次遍历。
1. 简化 extractNsisMacroBody
你不需要手动拆分并搜索两次;对于这些测试,一个非贪婪的宏体捕获就足够了:
function extractNsisMacroBody(source, macroName) {
const macroPattern = new RegExp(
String.raw`\b!macro\s+${macroName}\b([\s\S]*?)^\s*!macroend\b`,
'im'
);
const match = source.match(macroPattern);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1]
.split('\n')
.map((line) => line.trim())
.filter((line) => line.length > 0); // keep if you want to ignore blank lines
}这样可以保留:
- 通过
i实现对!macro/!macroend的大小写不敏感匹配。 - 通过
[\s\S]*?和m支持多行宏体。 - “宏必须存在”的断言。
2. 简化 getNsisDefineValue
你可以把原来的两个模式合并成一个,既负责找到对应的 define,又同时保证其值是“简单字面量”;然后根据是否捕获到值来决定是否抛出异常:
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
String.raw`^\s*!define\s+${defineName}` +
String.raw`\s*(?:"([^"\s]+)"|'([^'\s]+)'|([^"' \t\r\n]+))?\s*$`,
'i'
);
for (const line of source.split('\n')) {
const trimmed = line.trim();
const match = trimmed.match(definePattern);
if (!match) continue;
const value = match[1] ?? match[2] ?? match[3];
if (!value) {
throw new Error(
`Expected NSIS define ${defineName} to have a simple literal value`
);
}
return value;
}
return undefined;
}这样可以保留:
- 每个辅助函数只使用 一个 正则。
- 对目标 define 的检测(大小写不敏感)。
- 支持双引号、单引号或不带引号的字面量。
- 当匹配到的
!define不具有简单字面量值(例如有额外标记)时,清晰的报错路径。
Original comment in English
issue (complexity): Consider refactoring both NSIS helper functions to use a single, well-documented regex each instead of multi-step scanning and multiple patterns.
You can keep all current behavior while simplifying both helpers to use a single, clearly documented regex each and avoid the double‑index / double‑regex passes.
1. Simplify extractNsisMacroBody
You don’t need to manually split and search twice; a single non‑greedy macro‑body capture is enough for these tests:
function extractNsisMacroBody(source, macroName) {
const macroPattern = new RegExp(
String.raw`\b!macro\s+${macroName}\b([\s\S]*?)^\s*!macroend\b`,
'im'
);
const match = source.match(macroPattern);
assert.ok(match, `Expected NSIS macro ${macroName} to exist`);
return match[1]
.split('\n')
.map((line) => line.trim())
.filter((line) => line.length > 0); // keep if you want to ignore blank lines
}This preserves:
- Case‑insensitive
!macro/!macroendviai. - Multi‑line bodies via
[\s\S]*?andm. - The “macro must exist” assertion.
2. Simplify getNsisDefineValue
You can collapse the two patterns into one that both finds the define and enforces the “simple literal value” constraint, then use the presence/absence of a captured value to decide whether to throw:
function getNsisDefineValue(source, defineName) {
const definePattern = new RegExp(
String.raw`^\s*!define\s+${defineName}` +
String.raw`\s*(?:"([^"\s]+)"|'([^'\s]+)'|([^"' \t\r\n]+))?\s*$`,
'i'
);
for (const line of source.split('\n')) {
const trimmed = line.trim();
const match = trimmed.match(definePattern);
if (!match) continue;
const value = match[1] ?? match[2] ?? match[3];
if (!value) {
throw new Error(
`Expected NSIS define ${defineName} to have a simple literal value`
);
}
return value;
}
return undefined;
}This keeps:
- Only a single regex per helper.
- Detection of the target define (case‑insensitive).
- Support for double‑quoted, single‑quoted, or bare literals.
- The clear error path when a matching
!definedoesn’t have a simple literal value (e.g. extra tokens).
This fixes a Windows installer cleanup regression that leaves the bundled backend Python process running across upgrade and reinstall flows.
The user-facing symptom is that app updates can close the desktop shell and start the NSIS installer, but installation then hangs on file-in-use errors under
backend\python, and a manual reinstall after uninstall can fail the same way untilpython.exeis killed in Task Manager. In practice the blocked file was_asyncio.pyd, which remained locked by the old bundled runtime process.The root cause was that our NSIS preinstall cleanup hook looked for
kill-backend-processes.ps1under$INSTDIR\resources\..., but the script is actually packaged at the install root as$INSTDIR\kill-backend-processes.ps1viatauri.conf.json. That meant the cleanup hook could skip the script entirely, leaving the old backend process alive while the installer tried to overwrite the bundled Python runtime.This change updates the NSIS hook to look for the install-root cleanup script first and only fall back to the updater resource path if needed. It also adds regression coverage that locks the expected lookup order in the hook and ensures the cleanup logic remains scoped to the provided install root.
Verification:
node --test scripts/ci/windows-installer-cleanup-script.test.mjspnpm test:prepare-resources由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以正确定位并运行捆绑的 PowerShell 脚本,防止遗留的后端进程阻碍升级。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,确保在安装和升级过程中,捆绑的后端 Python 进程能够被正确终止。
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以正确定位并运行捆绑的 PowerShell 脚本,防止遗留的后端进程阻碍升级。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,确保在安装和升级过程中,捆绑的后端 Python 进程能够被正确终止。
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
错误修复:
测试:
Original summary in English
Sourcery 总结
修复 Windows NSIS 安装程序后端清理逻辑,以便在升级和重新安装时,能在覆盖文件之前正确终止捆绑的后端运行时。
错误修复:
测试:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Bug 修复:
测试:
nsExec执行脚本。Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests:
Original summary in English
由 Sourcery 提供的摘要
修复 Windows NSIS 安装程序后端清理逻辑,以便在安装和升级过程中能够正确找到并调用捆绑的 PowerShell 脚本。
错误修复:
测试:
Original summary in English
Summary by Sourcery
Fix Windows NSIS installer backend cleanup so the bundled PowerShell script is correctly located and invoked during installs and upgrades.
Bug Fixes:
Tests: