【问题标题】:Calling and Embed Resource thru a Process on Button Click通过按钮单击过程调用和嵌入资源
【发布时间】:2017-08-16 15:20:29
【问题描述】:

所以我在我的解决方案中添加了资源(VS2012 (C#))。我已将它们设置为embedded。

我写了一个流程:

private void Run_CMD(string arguments);
{
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = arguments;
        process.Start();
}

我有一个菜单框,其中一个选项运行进程及其参数

Run_CMD(Argument Here);

我还有其他使用 CMD 进程并可以工作的脚本,但我尝试运行的脚本引用了一个 XML 文件来加载无线配置文件。

命令是

/k netsh wlan add profile filename=atoksvli.xml user=all & sc config Wlansvc start= Auto & net Start Wlansvc

Bat 文件中的这个命令和同一目录中的 xml 可以运行它,但我想将它添加到我的 WPF 中,所以当我选择菜单选项并点击运行按钮来激活进程时,它将拉取配置文件来自我作为资源添加的 xml。

我查看了其他关于在编译或运行时加载嵌入式资源的代码,但似乎没有一个对我有用。请给我一些线索,因为我需要做些什么来保持我的代码不变,所以选择一个菜单项然后点击运行将激活它以及它需要用来加载配置文件的嵌入式资源。

感谢您的帮助和建议,

tmitcham

【问题讨论】:

  • 嗯,你的问题的根源是你不能得到一些嵌入的XML?为什么不发布应该获取 XML 的代码?可能我误解了,但您在此处发布的所有内容似乎都只是围绕真正问题的噪音。
  • /k netsh wlan add profile filename=atoksvli.xml user=all & sc config Wlansvc start= Auto & net Start Wlansvc 是激活该进程的 Run_CMD 之后 () 中的参数。我已经尝试了关于使用 Assembly 和 System.IO、System.Reflection 加载嵌入资源的不同代码,但在加载嵌入资源时似乎没有任何效果,因此参数会命中 Temp 文件夹,我假设这是 WPF 时加载所有内容的位置跑步。除了这些信息,我什至不知道从哪里开始。 (感谢评论)
  • BAT 文件将使用环境变量,而 Process 不会。所以需要包含 netsh 和 atoksvli.xml 的完整路径名
  • 由于我试图将 xml 作为资源嵌入,最终将被编译并最终确定为 exe,我仍然需要包含 xml 的完整路径。我试图阻止程序尝试查找外部文件来运行其功能并使用内部资源。另外,如果文件在安装后从代码中列出的路径中移动,那么程序将无法正常工作???? (感谢评论)

标签: c# xml wpf visual-studio-2012 cmd


【解决方案1】:

我能够将资源导出到一个目录,然后运行 ​​cmd 进程的参数并指向程序中设置的文件位置,然后当程序退出时,它会清理所有目录和创建的文件。

if (Directory.Exists(path))//Does Directory Exist if so then copy and run file
                {
                    String myfile = Properties.Resources.ATOKSVLI;
                    File.WriteAllText (@"C:\SD\\ATOKSVLI.xml", myfile);
                    Run_CMD("/k netsh wlan add profile filename=atoksvli.xml user=all & sc config Wlansvc start= Auto & net Start Wlansvc ");
                }
            else //Create directory then copy file and run
                {
                    DirectoryInfo di = Directory.CreateDirectory(path);
                    String myfile = Properties.Resources.ATOKSVLI;
                    File.WriteAllText(@"C:\SD\\ATOKSVLI.xml", myfile);
                    Run_CMD("/k netsh wlan add profile filename=atoksvli.xml user=all & sc config Wlansvc start= Auto & net Start Wlansvc ");
                }

感谢所有伟大的 cmets 和建议,它让我思考要问什么以及去哪里看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2019-02-28
    • 2016-08-14
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多