Frage

Ich bin versucht, ein Programm zu starten, basierend auf einer Verknüpfung im Startmenü. Insbesondere, ich versuche zu Start Powerpoint auf der Grundlage ihrer Verknüpfung im Startmenü. Um dies zu erreichen, verwende ich die 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);
}

Ich bin in der Lage erfolgreich die Verknüpfung zu finden sowie ein IWshShortcut-Objekt erstellen. Allerdings, wenn ich versuche, die Verknüpfung Träger Anwendung auszuführen (über Process.Start (shortcut.TargetPath, shortcut.Arguments)), ein Win32Exception auftritt:

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:

Die einzige relevante Antwort, die ich in dieser finden konnte, war Diskussion . Mein Projekt wurde bereits Gebäude als x86-Anwendung

Da es relevant scheint, hier einige Hintergrundinformationen auf meinem System. Ich bin mit Windows 7 Professional 64-Bit, und haben Microsoft Office 2010 installiert. Dies ist Teil einer Anwendung Konsole in Visual Studio 2010 geschrieben, .NET Framework 4 Client Profile Targeting.

Ich bin in dem Prozess folgende alternative Lösungen zu untersuchen:

Das Windows-API-Code-Pack: http://code.msdn.microsoft.com/WindowsAPICodePack
Shortcuts ohne IWshRuntimeLibrary: Wie eine .lnk in c # lösen

Es tut uns Leid über den Mangel an sinnvoller Links. Es ist mein erster Beitrag und anscheinend kann ich nicht mehr als ein einfügen eine Tags.

War es hilfreich?

Lösung

Dies sollte einfach Arbeit:

Process.Start(shortcutPath);

Sie brauchen nicht auf die LNK zu öffnen, nur Fenster fragen, um sie auszuführen. Hinter den Kulissen, ein ShellExecute , die weiß, wie man eine .lnk zu verarbeiten.

do Process.Start wird
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top