C# Silverlight 调用 Google Chrome
1837
2020-09-09
C# Silverlight 调用 Google Chrome
Silverlight 是微软公司推出的的一项 RIA(Rich Internet Application,富网络应用),是一种跨浏览器、跨平台的 .Net Framework的实现,用来构建web交互应用,统一了服务器、Web、桌面的功能。
本文将介绍在 Silverlight 中通过 C# 代码来调用本地Google Chrome
调用流程
- 从注册表获取Chrome程序安装路径 调用RegRagd()方法,从注册表中返回项值或值名。
- 获取默认安装路径 当注册表获取不到时,获取Chrome的默认安装路径。 32位地址
C:\Program Files (x86)\Google\Chrome\Application\
64位地址C:\Program Files\Google\Chrome\Application\
示例代码
- 从注册表获取安装路径
/// <summary>
/// 从注册表获取Chrome安装路径
/// </summary>
/// <param name="path"></param>
public static string GetInstallPath()
{
if (Application.Current.HasElevatedPermissions && AutomationFactory.IsAvailable)
{
using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
try
{
var path = shell.RegRead(@"HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe\");
return path;
}
catch (Exception e)
{
return null;
}
}
}
else
{
MessageBox.Show("需操作注册表获取Chrome安装路径,请安装证书提升权限!");
return null;
}
}
注意:如果本机安装了Google Chrome ,一般注册表就会获取到安装路径
- 获取默认安装路径(注册表获取为空)
if (string.IsNullOrEmpty(path))
{
//32位安装路径
appPath = @"C:\Program Files (x86)\Google\Chrome\Application\";
appName = @"chrome.exe";
}
else
{
//验证注册表路径标准:以.exe结尾
int index = path.ToUpper().LastIndexOf(".EXE");
if (index > 0)
{
int i = path.LastIndexOf("\\");
appPath = path.Substring(0, i + 1);
appName = path.Substring(i + 1);
}
else
{
appPath = appName = "";
return "注册表路径未包含:.EXE";
}
}
- 判断.exe文件是否存在
try
{
using (dynamic fileSystemObject = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
{
if (fileSystemObject.FileExists(appPath + appName))
{
//路径如果带空格会出错,用引号处理
string cmd = "\"" + appPath + appName + "\"";
RunAppByOS(cmd, url);
}
else
{
//63位安装路径
appPath = @"C:\Program Files\Google\Chrome\Application\";
appName = @"chrome.exe";
if (fileSystemObject.FileExists(appPath + appName))
{
string cmd = "\"" + appPath + appName + "\"";
RunAppByOS(cmd, url);
}
else
{
//当通过注册表,32位安装路径,64位安装路径未找到时,提示下载
result = string.Format("在\"{0}\"下未能找到\"{1}\"", appPath, appName);
MessageBox.Show("在本地未找到谷歌浏览器,请下载后打开");
HtmlPage.Window.Navigate(new Uri("https://www.google.cn/intl/zh-CN/chrome/", UriKind.Absolute), "_blank");
}
}
}
}
catch (Exception ex)
{
result = string.Format("打开\"{0}\"失败\n{1}", appName, ex.Message);
}
- 打开软件
public static void RunAppByOS(string cmd, string param)
{
RunApplication(cmd + " " + param);
}
/// <summary>
/// SilverLight运行本地客户端程序
/// </summary>
/// <param name="path"></param>
public static void RunApplication(string path, int windowStyle = 1, bool waitOnReturn = false)
{
if (Application.Current.HasElevatedPermissions && AutomationFactory.IsAvailable)
{
using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
try
{
shell.Run(path);
}
catch (Exception e)
{
MessageBox.Show("软件执行出错, 请重试!\n" + e.Message);
}
}
}
else
{
MessageBox.Show("需调用本地应用程序,请安装证书提升权限!");
}
}
这样,就可在 Silverlight 中通过 C#代码 调用谷歌浏览器,以此类推,调用本地其他程序,也可利用此方法,调用其他程序,需换掉注册表项。
结语
SilverLight 是一项极其古老的技术,已被微软抛弃,2012年微软发布 SilverLight 5,至此再也没更新过,并且 VS2017 后,也不再支持 SilverLight 开发。网络上关于 SilverLight 的信息特别少,所以在此记录一点是一点…
- 5
- 0
-
分享