Impossibile avviare PowerPoint dall'inizio Menu di scelta rapida in C #
-
10-10-2019 - |
Domanda
Sto tentando di avviare un programma basato su un collegamento nel menu Start. In particolare, sto cercando di lancio powerpoint in base al suo collegamento nel menu Start. Per fare questo, sto usando l'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);
}
Sono in grado di trovare con successo il collegamento, nonché di creare un oggetto IWshShortcut. Tuttavia, una volta si tenta di eseguire l'applicazione sostegno del collegamento (tramite Process.Start (shortcut.TargetPath, shortcut.Arguments)), un Win32Exception verifica:
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:
La risposta unica correlato ho trovato è stato in questo discussione . Il mio progetto era già costruendo come applicazione X 86
Poiché sembra rilevante, ecco qualche informazione sul mio sistema. Sono in esecuzione Windows 7 Professional a 64-bit, e ho installato Microsoft Office 2010. Questo fa parte di un'applicazione console scritto in Visual Studio 2010, il targeting .NET Framework 4 Client Profile.
Sono in procinto di indagare le seguenti soluzioni alternative:
L'API di Windows Codice Confezione: http://code.msdn.microsoft.com/WindowsAPICodePack
Tasti di scelta rapida senza IWshRuntimeLibrary: Come risolvere un .lnk in C #
Ci scusiamo per la mancanza di collegamenti sensibili. E 'il mio primo post e apparentemente non può inserire più di uno utilizzando un tag.
Soluzione
Questo dovrebbe semplicemente lavoro:
Process.Start(shortcutPath);
Non è necessario aprire il LNK, basta chiedere le finestre per eseguirlo. Dietro la scena, Process.Start farà un ShellExecute che sa come elaborare un .lnk.