electron-updater의 노트
문서에서 설명한 대로 setFeedUrl을 사용하지 않습니다.
- 원본만 보면 움직일 것 같지만 머리글을 붙일 수 없습니다.
cons tructor에서 Http Header 지정
package.json | electron-builder.yml ...등 설정은 앱-업데이트입니다.yml에 반영되었지만 덮어쓸 수 있습니다.다만, 현금의directory에도 사용된다.
구축하지 않을 때 적당한dev-appdate.yml 해줄 수 있어.
카테고리
Provider > GenericProvicer
> GithubProvicer
AppUpdater > MacUpdater
AppUpdater > BaseUpdater > NsisUpdater
AppUpdater > BaseUpdater > AppImageUpdater
default
electron-bulilderのbiuld時のpublishの値が使われる。
app-update.yml
Provider 생성
configOnDisk를 따라잡으면 app-update.YML을 보고 있는 곳을 만났다.
protected async getUpdateInfoAndProvider(): Promise<UpdateInfoAndProvider> {
await this.app.whenReady()
if (this.clientPromise == null) {
// ここでつくる
this.clientPromise = this.configOnDisk.value.then(it => createClient(it, this, this.createProviderRuntimeOptions()))
}
const client = await this.clientPromise
const stagingUserId = await this.stagingUserIdPromise.value
client.setRequestHeaders(this.computeFinalHeaders({"x-user-staging-id": stagingUserId}))
return {
info: await client.getLatestVersion(),
provider: client,
}
}
private async loadUpdateConfig(): Promise<any> {
if (this._appUpdateConfigPath == null) {
this._appUpdateConfigPath = this.app.appUpdateConfigPath
}
return load(await readFile(this._appUpdateConfigPath, "utf-8"))
}
or SetFeed Url get appUpdateConfigPath(): string {
return this.isPackaged ? path.join(process.resourcesPath!!, "app-update.yml") : path.join(this.app.getAppPath(), "dev-app-update.yml")
}
이것도cons tructor에서 옵션을 지정한 것으로 불린다. setFeedURL(options: PublishConfiguration | AllPublishOptions | string) {
const runtimeOptions = this.createProviderRuntimeOptions()
// https://github.com/electron-userland/electron-builder/issues/1105
let provider: Provider<any>
if (typeof options === "string") {
provider = new GenericProvider({provider: "generic", url: options}, this, {
...runtimeOptions,
isUseMultipleRangeRequest: isUrlProbablySupportMultiRangeRequests(options),
})
}
else {
provider = createClient(options, this, runtimeOptions)
}
this.clientPromise = Promise.resolve(provider)
}
autoUpdater.setFeedUrl()
원래는 문서에서 사용하지 말라고 쓰여 있었다.
cons tructor에서 지정한 녀석은 헤더를 유지하지만 set Feed Url에서는 무시됩니다.
(혹은 실제로는 효과가 없다)
configuration에 헤더의 참고가 없습니다.
if (options != null) {
this.setFeedURL(options)
if (typeof options !== "string" && options.requestHeaders) {
this.requestHeaders = options.requestHeaders
}
}
protected async getUpdateInfoAndProvider(): Promise<UpdateInfoAndProvider> {
await this.app.whenReady()
if (this.clientPromise == null) {
this.clientPromise = this.configOnDisk.value.then(it => createClient(it, this, this.createProviderRuntimeOptions()))
}
const client = await this.clientPromise
const stagingUserId = await this.stagingUserIdPromise.value
// ここでheaderをつけている。
client.setRequestHeaders(this.computeFinalHeaders({"x-user-staging-id": stagingUserId}))
return {
info: await client.getLatestVersion(),
provider: client,
}
}
NsisUpdater
private computeFinalHeaders(headers: OutgoingHttpHeaders) {
if (this.requestHeaders != null) {
Object.assign(headers, this.requestHeaders)
}
return headers
}
quit에 불과하지만 quit 활동에는 hook이 있다. quitAndInstall(isSilent = false, isForceRunAfter = false): void {
this._logger.info(`Install on explicit quitAndInstall`)
const isInstalled = this.install(isSilent, isSilent ? isForceRunAfter : true)
if (isInstalled) {
setImmediate(() => {
this.app.quit()
})
}
else {
this.quitAndInstallCalled = false
}
}
그리고 설치어를 실행합니다.관리자 권한이 필요할 때elevate입니다.실행
installer의 실제 상태는 다운로드한 exe처럼 보입니다
this._file
privte라서 여기 전부예요.nsis installer 다운로드되나요?
Setup.exe 같은 걸 뱉은 것 같아. 아마 이게 설치 프로그램일 거야.이해
응, Windows 기계가 없으면 조작하기 좀 어려워.
download와 설치의 차이점
Reference
이 문제에 관하여(electron-updater의 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/remon/articles/051ffa3185a72a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)