Question

Je tente de lancer un programme basé sur un raccourci du menu Démarrer. En particulier, je suis en train de powerpoint de lancement basé sur le raccourci du menu Démarrer. Pour ce faire, je me sers du 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);
}

Je suis en mesure de trouver avec succès le raccourci ainsi que de créer un objet IWshShortcut. Cependant, une fois que je tente d'exécuter la demande de support du raccourci (via Process.Start (shortcut.TargetPath, shortcut.Arguments)), un Win32Exception se produit:

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 seule réponse connexe que je pouvais trouver était dans cette discussion . Mon projet était déjà construit comme une application x86

Comme il semble pertinent, voici quelques informations sur mon système. Je suis sous Windows 7 Professionnel 64 bits et Microsoft Office 2010 est installé. Cela fait partie d'une application console écrite dans Visual Studio 2010, le ciblage .NET Framework 4 Client Profile.

Je suis en train d'étudier les solutions alternatives suivantes:

Le code API Pack Windows: http://code.msdn.microsoft.com/WindowsAPICodePack
Raccourcis sans IWshRuntimeLibrary: Comment résoudre un .lnk en c #

Désolé de l'absence de liens sensibles. Il est mon premier post et apparemment je ne peux pas insérer plus d'un en utilisant un balises.

Était-ce utile?

La solution

Cela devrait simplement le travail:

Process.Start(shortcutPath);

Vous n'avez pas besoin d'ouvrir le LNK, il suffit de demander les fenêtres pour l'exécuter. Derrière la scène, Process.Start fera un ShellExecute qui sait comment traiter une .lnk.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top