有没有办法在Windows 8上从Metro风格的应用程序启动桌面应用程序?我正在尝试为桌面应用程序创建一些简单的快捷方式,以替换开始屏幕上的桌面图标,这些图标看起来不合适。
我只需要一些非常简单的东西,最好是在C#中,一旦应用程序加载就打开一个应用程序。我打算为一些游戏,photoshop等制作这些快捷方式,而不是我自己制作的任何东西。它们也仅供个人使用,因此我可以直接使用"C:\Program Files (x86)\Steam\steamapps\common\Skyrim\TESV.exe"
答案 0 :(得分:21)
如果您只是想运行像(记事本,wordpad,Internet Explorer等)的桌面应用程序,请浏览Process Methods和ProcessStartInfo Class
try
{
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "C:\Path\To\App.exe";
p.Start();
}
// Exp 2
// Uses the ProcessStartInfo class to start new processes,
// both in a minimized mode.
void OpenWithStartInfo()
{
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process.Start(startInfo);
startInfo.Arguments = "www.northwindtraders.com";
Process.Start(startInfo);
}
在Windows 8 Metro应用程序中,我发现了这个:How to Start a external Program from Metro App。
所有Metro风格的应用程序都在高度沙盒中使用 环境并没有办法直接启动外部 应用
您可以尝试使用Launcher class - 取决于您的需要 为您提供可行的解决方案。
检查:
Can I use Windows.System.Launcher.LauncherDefaultProgram(Uri) to invoke another metro style app?
参考: How to launch a Desktop app from within a Metro app?
Metro IE是一款特殊应用。您无法从Metro风格的应用程序调用可执行文件。
试试这个 - 我还没有测试,但可能会帮助你..
// Path to the file in the app package to launch
string exeFile = @"C:\Program Files (x86)\Steam\steamapps\common\Skyrim\TESV.exe";
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(exeFile);
if (file != null)
{
// Set the option to show the picker
var options = new Windows.System.LauncherOptions();
options.DisplayApplicationPicker = true;
// Launch the retrieved file
bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
答案 1 :(得分:12)
我找到了适合我的解决方案。我刚刚在我的应用程序中创建了一个空文本文件,并将其命名为launcher.yourappyouwanttostart
,然后使用
Windows.System.Launcher.LaunchFileAsync("launcher.yourappyouwanttostart");
在第一次启动时,它会要求您提供此文件的关联,然后选择要运行的exe文件,从现在开始,每次执行此文件时,您的应用程序都将启动。
答案 2 :(得分:3)
我还没有尝试过它是否有效并且它不是一个非常漂亮的解决方案,但我猜Metro风格的应用程序可以启动一个URI。 然后,您可以创建一个为自定义URI方案注册的桌面程序,然后执行实际的程序启动。
答案 3 :(得分:1)
您可以做的是在计算机上托管外部WCF服务并单独安装,并使用localhost从metro风格应用程序连接到该服务。然后你可以做很多事情,包括Process.Start。
答案 4 :(得分:0)
我喜欢简单的事情,所以我的解决方案是使用它:
Process.Start("explorer", "shell:AppsFolder\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App")
这将启动与Windows 10周年更新一起推出的“新”粘滞便笺,但它可以与我测试的所有其他“Metro”应用程序一起使用。 要查找metro应用程序的名称,请从Windows资源管理器中使用AppUserModelId列在shell:appsfolder中找到它。