如何使用C#启动wifi网络快捷方式

时间:2009-07-07 20:31:52

标签: c# wireless

我在C:\ Temp文件夹中为Wifi网络连接创建了一个快捷方式(特殊类型的快捷方式)

我正在尝试使用C#

启动它

System.Diagnostics.Process myProc = new System.Diagnostics.Process();
myProc.StartInfo.FileName = "C:\\Temp\\wifi.lnk";
myProc.Start();

当我运行上面的代码时,没有真正发生的事情。当我设置“UseShellExecutable = False”和“RedirectStandardError = True”时,我收到一个异常,说“指定的可执行文件不是有效的Win32应用程序”

我试图通过pinvoking“FindExecutable()”方法找到可执行文件,但它返回空字符串。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:1)

你错过了路径中的冒号。我在桌面上创建了快捷方式,然后运行以下内容,它按预期工作...

System.Diagnostics.Process myProc = new System.Diagnostics.Process();
myProc.StartInfo.FileName = @"C:\Users\scott\Desktop\wifi.lnk";
myProc.Start();

答案 1 :(得分:1)

是的,我已经确认这对WinXP不起作用。 如果检查lnk文件的快捷方式选项卡,您会发现targettype实际上是GUID(映射到指定网卡的guid)。

我的猜测是,在XP下使用process.start时,shell没有正确处理必要的guid转换。 您可能必须尝试以不同的方式在XP下启动快捷方式,例如使用Win32 com interop调用来启动快捷方式。查看pinvoke网站的功能标题。

编辑: 实际上我没有引用FindExecutable签名,我是指的 http://www.pinvoke.net/default.aspx/shell32.ShellExecute

也尝试了cmd.exe / k,但也无效。 pinvoke或.bat文件是你唯一的朋友,看起来像是bradman。

答案 2 :(得分:0)

也许如果你shell执行.lnk?

使用rundll32?

答案 3 :(得分:0)

using System;
// add a reference to the com component
// "Windows Script Host Object Model" for IWshRuntimeLibrary
using IWshRuntimeLibrary;

namespace ConsoleApplicationCSharp
{  
  public class Foo
  {
    public static void Main(string[] args)
    {
      string pathLnk = @"C:\Users\scott\Desktop\wifi.lnk";

      WshShell shell = new WshShell();
      IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(pathLnk);
      Console.WriteLine("target path: " + shortcut.TargetPath);
      Console.WriteLine("argument: " + shortcut.Arguments);
      Console.WriteLine("working dir: " + shortcut.WorkingDirectory);
      return;

    }
  }
}

此代码是否能够从wifi.lnk中提取信息?

答案 4 :(得分:0)

如前所述,快捷方式的目标是GUID,因此FindExecutable将无法提供帮助,但如果您感兴趣,这里是它的签名:

    [DllImport("shell32.dll")]
    static extern IntPtr FindExecutable(string file, string directory, [Out] StringBuilder result);

有趣的是,运行“start wifi.lnk”可以在命令提示符下运行,但这不会:

class Program
{        
    static void Main(string[] args)
    {
        Process p = new Process();
        p.StartInfo.Arguments = "/c start wifi.lnk";
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.WorkingDirectory = @"C:\Documents and Settings\Administrator\Desktop";
        p.Start();
    }
}

任何人都想冒险猜测为什么?

如果你真的,真的,真的需要这个工作,你可以将“启动wifi.lnk”放入批处理文件并从你的程序启动它,但它绝对是一个kludge。