如何以编程方式卸载浏览器外的Silverlight 4应用程序,而不是使用上下文菜单(例如,如果我想替换上下文菜单)?
修改
我在"Installing Silverlight applications without the browser involved"中找到了如何通过调用命令行卸载:
“%ProgramFiles%\ Microsoft Silverlight \ sllauncher.exe”/ uninstall /origin:silverlight.net/content/samples/apps / ...
这可用于: -
dynamic cmd = AutomationFactory.CreateObject("WScript.Shell");
cmd.Run(run, 1, true);
有没有更好的解决方案?
答案 0 :(得分:2)
我不确定您是否可以通过编程方式执行此操作。
一个选项是让用户使用“添加/删除程序”将其删除。
另一种方法是使用静默安装选项将其删除(link - http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2010/03/24/silverlight-4-rc-and-the-silent-installation.aspx),但这涉及COM互操作调用。
麦克
答案 1 :(得分:1)
你提到的解决方案仍然是我所知道的唯一方法。虽然因为卸载后应用程序仍然在运行,但是在Application.Current.MainWindow.Close();
之后会有一个很好的触摸。
马克
答案 2 :(得分:1)
如果没有像迈克所说的那样诉诸COM互操作,这是不可能的,我也会质疑这是不是一个好主意:
1)删除卸载选项无疑会惹恼许多用户并且是不好的做法。 2)您说您正在寻求实施新的上下文菜单?除非这是一个LOB应用程序,否则我会对此保持警惕,因为许多用户将不会习惯访问Web应用程序中的上下文菜单,这对我来说是糟糕的HCI。如果它是一个LOB应用程序,那么添加/删除程序将是一个好的解决方案吗?
答案 3 :(得分:1)
这不是答案,但它与您的问题有关。在官方的Silverlight心愿单上,我添加了很久以前这样做的能力。幸运的是,很少有用户同意。有足够的票数,希望它会出现在Silverlight的未来版本中。
答案 4 :(得分:0)
在这里查看我的解决方案:Unable to Uninstall SIlverlight Out Of Browser Application Programatically我在控制台应用程序中使用了代码,该应用程序由正在卸载的silverlight应用程序运行。 Silverlight将EXE作为资源提取到其中一个目录,然后使用以下内容运行它:
using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
shell.Run(@"C:\Users\yourusername\AppData\update.exe xapNameToUninstall");
}