ReportViewer 自定义协议

ReportViewer Custom Protocol

我在我的 WPF 应用程序中使用 ReportViewer,我正在尝试获取一个自定义协议来处理该应用程序。因此,当在 ReportViewer 中单击 url 时,我能够在我的应用程序中打开子程序。

当我单击自定义协议-url(在 ReportViewer 内)时,没有任何反应。 当我通过 Web 浏览器打开同一份报告时,我的 URL 运行完美。

ReportViewer 似乎不允许自定义协议?有没有人也经历过?有这方面的文档吗?

http、https 和 mailto 正在 ReportViewer 中工作。

我只是在报告中添加一个指向我的 url 的操作 customurl://123

Url定义:

[HKEY_CLASSES_ROOT\customurl]
@="URL: customurl Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\customurl\shell]

[HKEY_CLASSES_ROOT\customurl\shell\open]

[HKEY_CLASSES_ROOT\customurl\shell\open\command]
@="\"C:\Extra Programme\TestAlert.exe\" \"%1\""

Testalert(只是微软的测试程序):

static string ProcessInput(string s)
{
    // TODO Verify and validate the input 
    // string as appropriate for your application.
    return s;
}

static void Main(string[] args)
{
    Console.WriteLine("Alert.exe invoked with the following parameters.\r\n");
    Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine);

    Console.WriteLine("\n\nArguments:\n");
    foreach (string s in args)
    {
        Console.WriteLine("\t" + ProcessInput(s));
    }
    Console.WriteLine("\nPress any key to continue...");
    Console.ReadKey();
}

我查看了 ReportViewer 的代码并找到了一个 if 语句,它检查 url 是否以 http://https://mailto: 开头。

它通过 Uri.UriSchemeHttpUri.UriSchemeHttpsUri.UriSchemeMailto

获取此信息

所以你可以覆盖例如。 Uri.UriSchemeHttp"customurl"(如果您的 url 是 customurl://123),然后再呈现报告。

var field = typeof(Uri).GetField("UriSchemeHttp");
field.SetValue(null, "customurl");

更优雅的解决方案是使用网络浏览器控件并只显示 SSRS 网页