Sakura: innosetup-5.6.1-unicode.exe で Unknown constant "sendto" のエラーでインストーラの作成に失敗する

Created on 17 Jun 2018  ·  34Comments  ·  Source: sakura-editor/sakura

innosetup-5.6.1-unicode.exe で Unknown constant "sendto" のエラーでインストーラの作成に失敗する
innosetup-5.5.9-unicode.exe ではエラーは発生しない。

http://files.jrsoftware.org/is/5/ で innosetup-5.5.9-unicode.exe をダウンロードして回避することは可能

ただ appveyor が innosetup-5.6.1-unicode.exe にアップデートされると困るのでそれまでに解決する。

CI installer specification change

All 34 comments

エラーメッセージ

Error on line 86 in C:\...\installer\sakura.iss: Unknown constant "sendto".

Use two consecutive "{" characters if you are trying to embed a single "{" and not a constant.
Compile aborted.

http://www.jrsoftware.org/files/is5-whatsnew.htm5.6.1 (2018-06-14) に以下と書いている。

The {sendto} constant has been renamed to {usersendto} and now can correctly trigger a used user areas warning. It still returns the same directory: the path to the current user's Send To folder. (There is no common Send To folder.)

https://github.com/m-tmatma/sakura/blob/a84fac8b1ea52a878e3261bf1e0faf16254dbdeb/installer/sakura.iss#L86

{sendto} を {usersendto} に名前変更したら 5.6.1 でビルドが通ったが、
今度は 5.5.9 でビルドが通らなくなる。

仕様を変えるなら移行期間を設けてどちらでもいけるようにしないと駄目だろうと思う。

http://www.jrsoftware.org/newsgroups.php
で質問を投げることが可能みたい。

Inno Setup のソース自体は
https://github.com/jrsoftware/issrc
で管理されているぽい。

http://www.jrsoftware.org/newsgroups.php
で質問を投げることが可能みたい。

innosetup-5.5.9-unicode.exe と innosetup-5.6.1-unicode.exe の両方に対応できる方法が
あればいいのだが。

仕様を変えるなら移行期間を設けてどちらでもいけるようにしないと駄目だろうと思う。

激しく同意。過去のスクリプトが動かんくなる。。。

innosetup-5.5.9-unicode.exe と innosetup-5.6.1-unicode.exe の両方に対応できる方法が
あればいいのだが。

考えられる対策

  1. innosetup-5.5.9-unicode.exe と innosetup-5.6.1-unicode.exe が両方インストールできるか調べて可能であれば appveyor に両方インストールしてもらうように頼む
  2. appveyor が innosetup-5.6.1-unicode.exe に切り替えるまで待つ。古い仕様の対応は諦める
  3. setup.iss の中でバージョンチェックして、両対応できないか調べる
  4. Inno Setup に要求して、innosetup-5.6.2 で {sendto} がエラーにならないようにして、と要求する。
    (innosetup-5.6.2 が出るまでは appveyor に更新しないでとお願いしておく)

最後の選択肢が一番いいが。

  1. Inno Setup に要求して、innosetup-5.6.2 で {sendto} がエラーにならないようにして、と要求する。
    (innosetup-5.6.2 が出るまでは appveyor に更新しないでとお願いしておく)
  1. 自分で修正する PR を投げる

もありますね。

appveyor/ci#2444 で Inno Setup version 5.6.1 にアップデートする要求が
出されていたので反対意見を書いておいた。

毎回 URL を調べなくていいように wiki にまとめた。

う~む。大変な感じになっていますね。お疲れ様です。
C++でいうこんな感じのことが iss でもできればよいのですが。

#if _MSC_VER > 1000
#pragma once
#endif

できるなら新旧どちらか環境向けにラッパーを用意してあげればよいはずなので。

こんな感じになりますかね?

#if PREPROCVER < [iss pre-proccessor 5.6.1のバージョン]
#define usersendto sendto
#endif

sendto が右クリックメニュー「送る」に表示するショートカットを入れるフォルダのことだということに今更気付いたわけですが(^-^;

PREPROCVER使えそうですが、ビット操作入りそうでつらいなぁ(というか今日はもうぼちぼち電池切れ)

PREPROCVER | int. Returns the 32-bit encoded version of ISPP. Highest byte holds the major version, lowest byte holds the build number.

http://www.jrsoftware.org/ispphelp/index.php?topic=if

でもこの仕様変更対応をゴリゴリこっちでコーディングして対応するのもなんか納得がいかない気がするのは私だけ???
http://www.jrsoftware.org/ishelp/index.php?topic=consts
usersendtoは他のuserなんたらとちがって、usersendtoしかなさそうだから、sendtoのままでもいい気がする。。。

iss ファイル側でなんとかする方法は、これから作成する iss ファイルには
対応できるのですが、過去に作ったファイルには効果ないので
Inno Setup 側または appveyor 側でなんとかしたいです。

返事返ってきた。
http://news.jrsoftware.org/read/article.php?id=106217&group=jrsoftware.innosetup#106217

Use something like

#if VER < EncodeVer(5,6,1)
  #define MySendTo "{sendto}"
#else
  #define MySendTo "{usersendto}"
#endif

and then {#MySendTo} in place of {sendto}/{usersendto}.

iss ファイルを変更しないで対応する方法がないか質問した。
http://news.jrsoftware.org/read/article.php?id=106218&group=jrsoftware.innosetup#106218

こんな感じになりますかね?

if PREPROCVER < [iss pre-proccessor 5.6.1のバージョン]

define usersendto sendto

endif

sendto が右クリックメニュー「送る」に表示するショートカットを入れるフォルダのことだということに今更気付いたわけですが(^-^;

これとやることは一緒ですが、
作者から提案のあった workaround を実装してみた。
3085ae3d801ee3ed83f797129169046cd88e37f2

5.5.9 と 5.6.1 で動くことを確認した。

どうしようかな、とりあえず動いたし、appveyor と InnoSetup への要求を取り下げるか?
あるいは他の人のためにあくまでも過去互換性を維持してもらうようにがんばるか?

@m-tmatma さん
能動的に動けるなら、待つよりGo.がいいと思います!

iss ファイルを変更しないで対応する方法がないか質問した。
http://news.jrsoftware.org/read/article.php?id=106218&group=jrsoftware.innosetup#106218

追加の回答が来るかしばらく待ってから考えよう。

追加の回答が来るかしばらく待ってから考えよう。

動いたことは伝えたほうがいいので、コメント書いた。
更に、過去互換性を維持するように改めて送っておいた。

http://news.jrsoftware.org/read/article.php?id=106220&group=jrsoftware.innosetup#106220

@m-tmatma さんお疲れ様です。
これ非常に参考になります。

更に、過去互換性を維持するように改めて送っておいた。

変えるつもりはなさそう。
http://news.jrsoftware.org/read/article.php?id=106221&group=jrsoftware.innosetup#106221

しゃーない。
でも言い続けることは大事です。

一応送ってみた。でも聞き入れないだろうな。
http://news.jrsoftware.org/read/article.php?id=106228&group=jrsoftware.innosetup#106228

http://www.jrsoftware.org にアクセスできない。

http://www.jrsoftware.org にアクセスできない。

https://github.com/jrsoftware/issrc によると

**NOTE** Currently the main Inno Setup web site is down. The 5.6.1 binaries can be downloaded from GitHub under releases. -

とある。

http://www.jrsoftware.org にアクセスできない。

復活したみたいだ。

http://news.jrsoftware.org/read/thread.php?group=jrsoftware.innosetup
は更新ないみたいだ。

176 でマージ済み

とりあえず、こちらもクローズかな?

クローズで良いと思います。
自分のコミットで参照してることになってるのは、リベース失敗による誤りです。

Was this page helpful?
0 / 5 - 0 ratings