sakura icon indicating copy to clipboard operation
sakura copied to clipboard

ユーザーがバグ報告するときに、OS 等の情報を簡単に取得できるようにする

Open m-tmatma opened this issue 6 years ago • 12 comments

ユーザーがバグ報告するときに、OS 等の情報を簡単に取得できるようにする

ヘルプ → バージョン情報 → 情報をコピー で サクラエディタ のバージョン情報をクリップボードに取得できるが、 OS の情報も取得できるようにする。

従来 OS の情報を取得するには GetVersionEx が使われてきたが、 Windows 8.1 以降では manifest を正しく設定しないと偽装された値を返す。

manifest に指定する GUID のメンテが面倒なので WMI を使ってみる

m-tmatma avatar Jun 09 '18 00:06 m-tmatma

https://msdn.microsoft.com/en-us/library/aa392107(v=vs.85).aspx を見ると Minimum supported client が Windows Vista とあるので、 WMI を使う場合、Windows Vista 以降が対象になる。

まず、IsWindowsVistaOrGreater を使って Windows Vista 以降か チェックして、Windows Vista 以前なら、GetVersionEx を使うようにすれば Windows Vista 以前にも対応は可能。

そもそも Visual Studio 2017 で生成したバイナリが Windows Vista 以前で動くかという懸念があるが。

m-tmatma avatar Jun 10 '18 07:06 m-tmatma

そもそも Visual Studio 2017 で生成したバイナリが Windows Vista 以前で動くかという懸念があるが。

インストール時にxpサポートがどうの、という項目があるのでxpはイケると思ってました。 2018-05-29 4

そういえばまだ試していないです。 すでに試してみた人いないかな~と呟いてみたり(^^;

berryzplus avatar Jun 10 '18 08:06 berryzplus

XPサポート、まだ試したことないです

kobake avatar Jun 10 '18 08:06 kobake

というか Windows XP の環境持ってなくて確認する手段が無い……(今手元にあるのは Win10, Win2000 のみ)

kobake avatar Jun 10 '18 08:06 kobake

従来 OS の情報を取得するには GetVersionEx が使われてきたが、 Windows 8.1 以降では manifest を正しく設定しないと偽装された値を返す。

非公式な方法としては、ntdll.dll の RtlGetVersion を使う技があります。manifest が無くとも正しい値が返ってきます。例: https://gist.github.com/k-takata/f2262db2b342a49a76a70669ce8fdd0d

k-takata avatar Jun 10 '18 08:06 k-takata

確か、XPサポートを入れると Windows SDK 7.1A がインストールされるようになり、ツールチェーンとして ***_xp を選択すると、それが使われるようになります。 実際には、

  • LIB, INCLUDE に Windows SDK 7.1A のディレクトリが追加される。
  • _USING_V110_SDK71_ が define される。
  • link のオプションに /subsystem:console,5.01 が指定される。(x64 の場合は 5.02)

ということが行われているようです。

k-takata avatar Jun 10 '18 09:06 k-takata

wow 64 の情報もあってもいいかも https://takamints.hatenablog.jp/entry/2015/02/11/111714

m-tmatma avatar Jun 11 '18 00:06 m-tmatma

現状、MSVCのビルドシステムの都合で、windows 10 SDKが必須となっています。

ただまぁ、プリプロセッサで _WIN32_WINNT=_WIN32_WINNT_WIN7 と定義しているので、win8以降が必要なwindowsの機能は使えないです。 https://github.com/sakura-editor/sakura/blob/17bcab72eac7647cd8b7424db92aa4f87b9aff97/sakura/sakura.vcxproj#L89-L94

そもそも Visual Studio 2017 で生成したバイナリが Windows Vista 以前で動くかという懸念があるが。

インストール時にxpサポートがどうの、という項目があるのでxpはイケると思ってました。

とコメントしとりますが、xpは無理っす。

利用可能なOSバージョンは win7 <= ver です。 で、win7初期バージョンで実装されていなかった windows の機能は原則として使えないです。

従来 OS の情報を取得するには GetVersionEx が使われてきたが、 Windows 8.1 以降では manifest を正しく設定しないと偽装された値を返す。

正しく設定したったらいいだけじゃんね? という結論にしたら、 ぼくたちは正しくない manifest しか用意できないザコなので、OS情報を簡単に取得できるようにするための代替手法を考えなくてはいけない! というこの issue の根底にある課題を解決できるように思います。

というわけで、閉じてしまいます。

berryzplus avatar Sep 11 '20 14:09 berryzplus

よく分かりませんが、

ユーザーがバグ報告するときに、OS 等の情報を簡単に取得できるようにする

という要望は却下ということですか?

k-takata avatar Sep 11 '20 14:09 k-takata

メモ:https://docs.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1

beru avatar Sep 11 '20 15:09 beru

ユーザーがバグ報告するときに、OS 等の情報を簡単に取得できるようにする

という要望は却下ということですか?

すんません、issueの趣旨を読み違いました。

簡単には取得できないバージョン情報の取得方法を検討してるように見えたので、 そんなもん検討する必要ないわぁっ! と閉じたつもりでした。

berryzplus avatar Sep 11 '20 16:09 berryzplus

「OS等の情報」って何やねん!から話したほうがいいんじゃないかな、と思います。

何がわかったらユーザーがバグに遭遇した環境を特定できる? です。

「Windows 10です。」と言われたとして、何を質問しますか? がたぶん答えっす。

berryzplus avatar Sep 11 '20 17:09 berryzplus