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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top