質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

1955閲覧

windowsアプリ ヘルプ画面上のURLをクリックすると”お使いのブラウザーはサポートされていません ”と表示される

sato4000

総合スコア42

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/03/25 06:59

編集2019/03/25 08:09

windowsアプリのヘルプ画面にURLを記載したのですが、そこをクリックするとURL先の画面がヘルプ画面に表示されます。その時、下記のように”お使いのブラウザーはサポートされていません”と表示されます。
実際に使用しているIE(バージョン:11.590.17134.0)でそのURLの画面を表示しても普通に表示されます。
何が原因かわかりますでしょうか。

開発環境:visualstudio2017
開発言語:C#
ヘルプファイル作成方法:doc2htmlhelpというツールを使用して、wordのファイルを変換

〇表示

お使いのブラウザーはサポートされていません

このサイトを利用するには、ブラウザーを更新する必要があります。

Internet Explorer を最新バージョンに更新する

ヘルプファイル内には下記のように記載しています。

参考 URL: https://support.microsoft.com/ja-jp/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows

ソースコードの一部

lang

1 private void DisplayHelpToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Help.ShowHelp(this, Properties.Resources.HtmlHelpFIle); 4 } 5 6 internal static string HtmlHelpFIle { 7 get { 8 return ResourceManager.GetString("HtmlHelpFIle", resourceCulture); 9 } 10 } 11 12    <data name="HtmlHelpFIle" xml:space="preserve"> 13   <value>xxx.chm</value> 14    </data>

xxx.chmがヘルプのファイル

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/25 07:07

埋め込み方は適切なのでしょうか。 手順や記載の仕方、設定、コードなどご提示ください。
sato4000

2019/03/25 07:33

閲覧いただきありがとうございます。 申し訳ありませんが、初心者であるためどこあたりの設定を確認したらよいのかわかりません。 お手数をおかけしますが、ご教示願います。
sato4000

2019/03/25 08:10

修正致しました。
guest

回答2

0

doc2htmlhelp で作成できる Windows のHTML Help(拡張子 *.chm)は今はWindowsとしても古い形式で、今では積極的に使われるものではないファイルとなっています。

.chmファイルはWindowsのシステムで独自にホスティングされるので、.chmファイル中のリンクから飛ぶと、通常使っているInternet Explorerとは別のWebBrowserコンポーネントが使われてブラウズされるようです。古いInternet Explorer、あるいはHTML Help用のコンポーネントが互換性維持の為に今も使われているものと思われます。

以下はdoc2htmlhelpで作成した*.chmファイルからリンクを踏んで、HTTPリクエストを出したものを採取したものです。(Windows 7 64ビット IE11インストール済み)

GET / HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */* Accept-Language: ja-JP UA-CPU: AMD64 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0) Host: localhost:8080 Connection: Keep-Alive

この内、HTTPクライアント種別を表すUser-Agent:には古いIEを示す、Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; ...が記述されています。これは互換モードで、Internet Explorer 7.0としてふるまっていると認識してよさそうです。その為、アクセス先のサーバーから「お使いのブラウザーはサポートされていません(<Internet Explorer 7.0は古いから) このサイトを利用するには、ブラウザーを更新する必要があります。」とHTTPレスポンスを返していると考えられます。

対応策としては、*.chmを使わないようにするか、制限事項としてURLを人間が手動でブラウザーに入力してアクセスするしか方法はなさそうに思います。

Wikipedia - Microsoft Compiled HTML Help

以上のように原因を述べるに留めた回答でしたが、別に有効な解決策をご存知の方もおられるかもしれないので、しばらく別の回答を待ってみてもよいかと思います。

投稿2019/03/25 08:56

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sato4000

2019/03/25 09:18

ご回答いただきありがとうございます。 とても参考になりました。
guest

0

ベストアンサー

WebBrowser コントロールは IE を使いますが、その際には低いバージョンの IE をエミュレートします。これを新しいバージョンに変えるにはレジストリを書き換えなくてはいけません。

C#

1string path = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; 2string exeName = "WindowsFormsApp1.exe"; 3Registry.SetValue(path, exeName, 0x2AF9, RegistryValueKind.DWord);

この時、管理者権限が必要です。
私は次のコードで Initialize.exe という実行ファイルを作っています。

C#

1using System; 2using System.Diagnostics; 3using System.IO; 4using System.Reflection; 5using Microsoft.Win32; 6 7namespace Initialize 8{ 9 public static class Program 10 { 11 private static readonly string path = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; 12 13 [STAThread] 14 static void Main(string[] args) 15 { 16 if (args.Length != 1) return; 17 Registry.SetValue(path, args[0], 0x2AF9, RegistryValueKind.DWord); 18 } 19 20 public static void Initialize() 21 { 22 var name = Path.GetFileName(Assembly.GetEntryAssembly().Location); 23 if (Registry.GetValue(path, name, null) == null) 24 { 25 var startInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().Location, name) 26 { 27 Verb = "Runas" 28 }; 29 var process = Process.Start(startInfo); 30 process.WaitForExit(); 31 } 32 } 33 } 34}

これを使用する際には、メインとなる実行ファイルのプロジェクトで Initialize.exe を参照し、次のように Initialize.Program.Initialize を呼びます。
こうすれば、レジストリがすでに書き換わっていれば何もせずメインとなる実行ファイルが始まり、そうでなければ Initialize.exe が管理者権限で実行されてレジストリが書き換えられます。

C#

1using System; 2using System.Windows.Forms; 3 4namespace WindowsFormsApp1 5{ 6 static class Program 7 { 8 [STAThread] 9 static void Main() 10 { 11 Initialize.Program.Initialize(); 12 Application.EnableVisualStyles(); 13 Application.SetCompatibleTextRenderingDefault(false); 14 Application.Run(new MainForm()); 15 } 16 } 17}

また、そもそも WebBrowser を使わないという手があります。可能ならこちらの方が望ましいですが、使用法が違うのでコードを書き換えなければいけません。

WPFやWindowsフォームでEdgeのWebViewを使うには?[Windows 10 1803以降]

投稿2019/03/25 09:10

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/03/25 09:16

chm ファイルだということを見逃していました。これを開くプログラムは hh.exe なので、上記の exeName にあたるところには hh.exe を書いてください。
sato4000

2019/03/25 09:17

ご回答いただきありがとうございます。 とても分かりやすく助かります。 WebBrowser を使わないという手というのも検討しようと思います。
Zuishin

2019/03/25 09:23

chm というのを見逃していたのでこのように書きましたが、chm だと WebView で開けるかどうかわかりません。一度ベストアンサーを外し、試してうまくいかなければ再度質問を編集してその旨追記してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問