Skip to content

Conversation

@graphemecluster
Copy link

為方便用户能一鍵安裝輸入粵語,我們(維護 rime-cantonese 的 CanCLID)從 2021 年開始已經會定期打包包含 rime-cantonese 及其依賴方案的安裝包。

但由於 appcast 頻道 hard code 成 http://rime.github.io/release/weasel/appcast.xml (或 http://rime.github.io/testing/weasel/appcast.xml​ ),現在用户透過 WinSparkle 更新程式時,仍會安裝 https://github.com/rime/weasel/releases 中的版本,導致「程序文件夾」中的方案被覆蓋,方案變化導致許多用户曾經投訴更新後不能正常使用。

此 PR 允許從登錄檔(註冊表)指定更新渠道,這樣就能從 install.nsi 指定 URL,不需重新編譯整個程式。

@graphemecluster graphemecluster changed the title Allow specifying custom appcast URL Allow specifying custom appcast URL 允許指定自訂更新渠道 Nov 5, 2025
@fxliang
Copy link
Contributor

fxliang commented Nov 6, 2025

隐约记得install.nsi中有备份shared data的操作,是不是那个部分的代码之前什么时候改坏了?修了就行?

@graphemecluster
Copy link
Author

@fxliang 這個 PR 在本質上與備份 shared data 無關。
現在的安裝腳本會先還原舊的 shared data 到 data 資料夾再複製安裝包內的碼表更新到 data,因此舊的 shared data 中的碼表只要是同名就會被覆蓋,來達致更新效果。

所以用户裝了我們的安裝包,不論有否備份 shared data,只要用户以 https://github.com/rime/weasel/releases 的安裝包進行更新,用户先前安裝我們安裝包的碼表就會被你們的覆蓋,造成用户意料之外的行為。
因此只能以指定更新渠道的方法防止這樣的事情發生。

@fxliang
Copy link
Contributor

fxliang commented Nov 10, 2025

解决方案不是应该将客制的方案集,放user data dir里来解决吗?

如果发版已经独立,可以修改rc文件中的数据就行

@graphemecluster
Copy link
Author

不是,因為 user data 永遠會優先於 shared data,用户一旦放 rime-cantonese 碼表到 user data 裏,安裝包的任何更新就不會奏效。

@lotem
Copy link
Member

lotem commented Nov 13, 2025

改註冊表有危險吧。
更新途徑應該在 app 裏內置。

@lotem
Copy link
Member

lotem commented Nov 13, 2025

導致「程序文件夾」中的方案被覆蓋,方案變化導致許多用户曾經投訴更新後不能正常使用。

更新的版本應該沒有打包粵語輸入方案呢,怎麼會覆蓋的?
具體的技術問題可以討論。

原則上配方包的設計應該兼容其他方案,以適應用家添加其他輸入方案的需求。

假如做得無法兼容了,只能用特定方案,那就需要另起一個發行版,用獨立的更新渠道。
獨立發行版也不應允許用戶修改爲從 rime 官網更新不兼容的軟件。

@fxliang
Copy link
Contributor

fxliang commented Nov 13, 2025

我记得,方案有plum可以更新吧@lotem

@graphemecluster
Copy link
Author

graphemecluster commented Nov 13, 2025

plum 只是一個協助更新 user data folder 的工具。當然也可以透過指定 rime_dir 變數來改成 shared data folder,但他終究只是一個命令列界面。
我承認允許從登錄檔(註冊表)指定會有保安風險。如果改成從命令列選項指定更新渠道,或者在程式資料夾內另開一個檔案放更新渠道,你們能接受嗎?

附帶一提,Squirrel 的更新渠道 URL 放在程式套件(實質上就是資料夾)內的 Info.plist 檔案,因此既輕易修改又無保安問題:
https://github.com/rime/squirrel/blob/1d117436f306fd49db7b665f70266f52e28fb85e/resources/Info.plist#L106-L107

另外,我們還有一個目標,就是當 rime-cantonese 有較大規模詞表更新時能夠立即通知用户更新。這也是我們希望能自訂更新渠道的原因之一。
(即使只是一個執行 plum 命令的 exe 也好,也需要透過 WinSparkle 來通知用户,因此這個 PR 與是否使用 plum 互不相關。)

@fxliang
Copy link
Contributor

fxliang commented Nov 14, 2025

  1. rime-cantonese有独立发版小狼毫的修改版吗?是
  2. rime-cantonese可以在独立发版的包中定义appcast url吗?是
  3. rime/weasel 管理希望appcast url可用户自定义吗?否

总结来说,如果已经独立发行了,就在独立发行的版本中的rc中修改好appcast url来发版,或者将当前修改在独立发行的版本中实现就可以了。

至于实际的用户需求是可以自动检测方案的上游更新,这个应该是方案管理工具的业务。
有更多想法可以写独立工具,或者参考rime-clirppi_get做计划任务定期拉取更新复制到用户目录中即可

@graphemecluster
Copy link
Author

現時我們發佈的是一個「半獨立發行版」,安裝包裏面除了 shared data 資料夾並沒有作任何更動,而我們並不希望更改任何安裝包裏面的可執行檔案(WeaselDeployer.exe、WeaselSetup.exe、WeaselSetup.exe 以及兩個 .dll)。這個 PR 的目的就是
讓我們在裏面的 .exe 維持跟官方發行版一致的情況下也可以修改 app cast URL。

我們固然可以重新編譯(甚或乎直接 sed)WeaselServer.exe 來修改更新頻道,但我們並不希望這樣做,因為這代表着用户安裝到程式資料夾的並非官方執行檔,而且執行檔的 hash 不同會導致防毒軟件識別成兩個不同的執行檔,次要原因是重新編譯會導致 CI 變得難以維護。

@lotem
Copy link
Member

lotem commented Nov 14, 2025

我現在還沒搞明白問題出在哪裏呢,也沒有跟進 rime-cantonese 的開發。

按照我的理解,rime-cantonese 打包的安裝程序就是小狼毫+定製的 appdata。我認爲這是一個方便用戶一次安裝完所需輸入法程序+方案的舉措。Rime 官網的版本與此類似,附帶的方案也是爲了優化開箱即用體驗和用戶安裝的成功率。

那麼從官網更新小狼毫主程序,這一步怎麼會覆蓋掉額外安裝的輸入方案呢?
我希望先把這件事情搞清楚。如果確實有問題,那應當修復。

在輸入法程序能夠兼容的情況下,從官網更新輸入法程序是推薦的做法呀。
沒有必要每個數據的發行版跟進無關的程序的變更,而額外維護一系列軟件版本。

@fxliang
Copy link
Contributor

fxliang commented Nov 14, 2025

我現在還沒搞明白問題出在哪裏呢,也沒有跟進 rime-cantonese 的開發。

按照我的理解,rime-cantonese 打包的安裝程序就是小狼毫+定製的 appdata。我認爲這是一個方便用戶一次安裝完所需輸入法程序+方案的舉措。Rime 官網的版本與此類似,附帶的方案也是爲了優化開箱即用體驗和用戶安裝的成功率。

那麼從官網更新小狼毫主程序,這一步怎麼會覆蓋掉額外安裝的輸入方案呢? 我希望先把這件事情搞清楚。如果確實有問題,那應當修復。

在輸入法程序能夠兼容的情況下,從官網更新輸入法程序是推薦的做法呀。 沒有必要每個數據的發行版跟進無關的程序的變更,而額外維護一系列軟件版本。

我目前理解的是rime-cantonese的方案会滚动更新并打包到rime-cantonese打包发行的小狼毫的shared data中,想通过appcast来从实现方案集的更新的样子。

我没有深入对比过,不是太确认更新安装是不是会用新安装包的文件来覆盖旧的shared data, 毕竟覆盖安装的时候似乎会备份一次旧的shared data安装完之后恢复的样子,这样是不是会用旧的shared data 来覆盖新的数据?

从需求的本质来看,目标是可以自动提示更新rime-cantonese的方案集,但是这个需求要从主程序更新来实现就有点扩大影响了

@lotem
Copy link
Member

lotem commented Nov 14, 2025

那太浪費了吧。

更新配方就可以啦。看來得加快研發新的配方管理器。

@graphemecluster
Copy link
Author

这样是不是会用旧的shared data 来覆盖新的数据?

新的數據會覆蓋舊的 shared data。新數據檔案與舊數據同名,則新數據優先;若果新數據中沒有同名檔案,則舊數據得以保留。


更新方案不是主要目標,因此我才説是「還有一個目標」,實際上可以預計 rime-cantonese 短期內都不會有大更新,所以還是以你們對程式的更新為主。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants