Не удается запустить PowerPoint из ярлыка меню Пуск в C#
Я пытаюсь запустить программу на основе ярлыка в меню "Пуск". В частности, я пытаюсь запустить 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:
Единственный связанный с этим ответ, который я смог найти, был в этой дискуссии. Мой проект уже строился как приложение x86
Поскольку это кажется уместным, вот некоторые сведения о моей системе. Я использую 64-разрядную версию Windows 7 Professional и установил Microsoft Office 2010. Это часть консольного приложения, написанного в Visual Studio 2010, предназначенного для.NET Framework 4 Client Profile.
Я нахожусь в процессе исследования следующих альтернативных решений:
Пакет кодов Windows API: http://code.msdn.microsoft.com/WindowsAPICodePack
Ярлыки без IWshRuntimeLibrary: как разрешить.lnk в C#
Извините за отсутствие толковых ссылок. Это мой первый пост, и, очевидно, я не могу вставить более одного, используя теги.
1 ответ
Это должно просто работать:
Process.Start(shortcutPath);
Вам не нужно открывать lnk, просто попросите Windows выполнить его. За кулисами Process.Start будет выполнять ShellExecute, который знает, как обрабатывать.lnk.