我正在尝试基于开始菜单快捷方式启动程序。特别是,我正在尝试基于其开始菜单快捷方式启动powerpoint。为此,我使用的是IWshRuntimeLibrary。
static void Main(string[] args)
{
string searchTerm = "powerpoint";
string startMenu = Environment
.GetFolderPath(Environment.SpecialFolder.CommonStartMenu);
string shortcutPath = Directory
.GetFiles(startMenu, "*.lnk", SearchOption.AllDirectories)
.OrderBy(p => p.Length)
.First(p => p.ToLower().Contains(searchTerm));
WshShell shell = new WshShell();
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);
Console.WriteLine(shortcut.TargetPath); //prints: C:\Windows\Installer\{90140000-0011-0000-0000-0000000FF1CE}\pptico.exe
Process.Start(shortcut.TargetPath, shortcut.Arguments);
}
我能够成功找到快捷方式以及创建IWshShortcut对象。但是,一旦我尝试运行快捷方式的后备应用程序(通过Process.Start(shortcut.TargetPath,shortcut.Arguments)),就会发生Win32Exception:
System.ComponentModel.Win32Exception was unhandled
Message=The specified executable is not a valid application for this OS platform.
Source=System
ErrorCode=-2147467259
NativeErrorCode=193
StackTrace:
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName, String arguments)
at Scratch.Program.Main(String[] args) in C:\Users\jhampton\Documents\Visual Studio 2010\Projects\Scratch\Scratch\Program.cs:line 26
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
我能找到的唯一相关答案是discussion。我的项目已经构建为x86应用程序
因为它似乎相关,所以这是我系统的一些背景知识。我正在运行Windows 7 Professional 64位,并安装了Microsoft Office 2010。这是使用Visual Studio 2010编写的控制台应用程序的一部分,目标是.NET Framework 4 Client Profile。
我正在调查以下替代解决方案:
Windows API代码包:http://code.msdn.microsoft.com/WindowsAPICodePack
没有IWshRuntimeLibrary的快捷方式:How to resolve a .lnk in c#
抱歉缺乏合理的链接。这是我的第一篇文章,显然我不能使用标签插入多个。
答案 0 :(得分:2)
这应该只是起作用:
Process.Start(shortcutPath);
您不需要打开lnk,只需要求windows执行它。在幕后,Process.Start将执行一个知道如何处理.lnk的 ShellExecute 。