精华内容
下载资源
问答
  • 2021-04-09 21:59:59

    如下

    2021-4-09-20:20

    导入命名空间

    首先导入命名空间:

    namespace System.Diagnostics
    

    导入这个命名空间之后如果使用Debug.Log("");可能会提示冲突,如果你想打印日志则可以:

    using Debug = UnityEngine.Debug;
    

    获取路径

    路径有相对路径和绝对路径两种。
    相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
    绝对路径:是一个文件的完整路径,包含盘符,当使用绝对路径的时候,文件夹位置改变了,而这里的代码没有及时更新就会报错。

    打开程序

    这里使用的是绝对路径,需要打开的程序需要和Unity一起发布那么请使用后面的方法

        private void OnGUI()
        {
            if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 31, 100, 62), "开启程序"))//按钮的X坐标,按钮的Y坐标,宽度,高度
            {
                string PrograssPath = "D:/Steam/Steam.exe";//双引号内填写程序的绝对路径,注意斜线的方向
                Process.Start(PrograssPath);
            }
     	}
    

    打开和Unity一起发布的外部程序

    首先在Assets下创建一个名为"StreamingAssets"的文件夹,这里字母不可以出错,然后将程序放到"StreamingAssets"文件夹内,然后使用代码来打开文件夹中的程序.

       private void OnGUI()
        {
            if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 31, 100, 62), "开启程序"))//按钮的X坐标,按钮的Y坐标,宽度,高度
            {
    
                 string  PrograssPath = Application.streamingAssetsPath + "/"+"Steam.exe";//这里是使用的路径是从"StreamingAssets"开始的路径,双引号内填写路径。
                Process.Start(PrograssPath);
            }
       	}
    

    当有外部程序在"StreamingAssets"文件夹中的时候发布会报错,需要将外部程序的文件夹剪切出去,然后发布unity程序,再把外部程序放到发布文件的"StreamingAssets"的文件夹中,注意路径不要出错。

    关闭程序

    关闭程序只需要知道程序的名称,然后就可以关闭程序

        /// <summary>
        /// 关闭程序
        /// </summary>
        /// <param name="processName">需要关闭的程序名,不需要后缀</param>
        private void KillProcess(string processName)
        {
            Process[] processes = Process.GetProcesses();
            foreach (Process process in processes)
            {
                try
                {
                    if (!process.HasExited)
                    {
                        if (process.ProcessName == processName)
                        {
                            process.Kill();
                            UnityEngine.Debug.Log("已关闭进程");
                        }
                    }
                }
                catch (System.InvalidOperationException ex)
                {
                    UnityEngine.Debug.Log(ex);
                }
            }
        }
    

    然后就可以调用方法来关闭程序

          if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 31, 100, 62), "关闭程序"))
            {
                KillProcess("Steam");//需要关闭的程序名称,可以在任务管理器中查看
            }
    

    更新:2021-5-23

    问题:当Unity发布之后将外部程序文件加入到“StreamingAssets”之后,运行Unity程序,但是外部程序提示找不到某个DILL。
    解决方案:1.先将外部程序放到桌面,测试程序是否正常,
    2.若正常将程序放到“StreamingAssets”启动发布的unity项目,若外部程序报错,检查是不是外部程序的报错的DILL是否在拷贝的时候丢了,若没有丢失可能是程序找不到DILL,说明程序的路径太长了找不到,win系统下路径最长大约是256字符。

    更多相关内容
  • C#程序启动和关闭外部程序

    千次阅读 2020-01-04 20:21:46
    【1】C#启动外部程序的几种常用方法汇总 【2】C# 调用exe程序总结 【3】MSDN文档:Process 类 【4】C# 进程Process基本的操作说明 【5】C#操作进程(Process) 1 方法 主要使用Process类。位于System....

    参考:
    【1】C#启动外部程序的几种常用方法汇总
    【2】C# 调用exe程序总结
    【3】MSDN文档:Process 类
    【4】C# 进程Process基本的操作说明
    【5】C#操作进程(Process)

    1 方法

    主要使用Process类。位于System.Diagnostics命名空间
    有两类方法
    (1)一种是定义一个Process实例,对这个实例的属性进行配置,然后启动它。类似与【2】中那样。如下:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
     p.StartInfo.FileName = AppConst.EngineFilePath;   //exe程序文件地址
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardInput = false;
     p.StartInfo.RedirectStandardOutput = false;
     p.StartInfo.RedirectStandardError = false;
     p.StartInfo.CreateNoWindow = true;					//不弹出窗口,改为后台运行
     p.StartInfo.Arguments = sb.ToString();  //参数 多个参数使用空格分开               
     p.Start();
     p.WaitForExit();
     p.Close();
    

    (2)另一种是利用Process的系统直接启动一个,可能就没法设置好多的东西了,类似于【1】中那样。

    private string appName = "calc.exe";
    private void button1_Click(object sender, EventArgs e)
    {
    Process.Start(appName);
    MessageBox.Show(String.Format("外部程序 {0} 启动完成!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    

    2 启动等待等

    参见【1】中,可以等待等。

    3 其他注意

    (1)新进程的工作目录
    不设置时为调用者的工作目录,如果不同,通过WorkingDirectory设置。如下:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.WorkingDirectory = "X:\\spinning";
    

    (2)进程的退出
    有2种方法:kill和CloseMainWindow。
    后者适用于有窗口的。能释放干净相关资源。
    而前者适用于所有。强制的杀死,可能带来资源释放不干净等问题。

    Process proc = Process.Start(appName);
    ....
    proc.Kill();
    

    我遇到的一个问题:
    我使用上述方法,启动一个程序的时候,他同时启动了两个同样名称的进程。
    上面的代码只能杀死一个,为此,改进了一种方法,按照名称杀死进程,将两个全部干掉。前提是这两个进程同名。

    string processName = "XX"//名称一般为程序的名字,不带后缀名exe。的可通过 p.ProcessName查看
    System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(processName);
    foreach (System.Diagnostics.Process p in ps)
    {
        if(!p.HasExited)	//当没有退出时,杀死他
            p.Kill();
    }
    
    展开全文
  • delphi嵌入外部程序

    2011-03-22 11:54:30
    delphi嵌入外部程序 注意 必须知道原始程序名称
  • C++中实现调用外部程序的方法

    万次阅读 2018-06-21 14:51:38
    1 system()函数system()函数的作用是执行指令,函数的格式为int system( const char *command );其中,参数command指定了要执行的指令。以下代码的作用是调用“e:\1.exe”程序。system("e:\\1.exe"...

    1 system()函数

    system()函数的作用是执行指令,该函数的格式为

    int system(  
    
       const char *command   
    
    );

    其中,参数command指定了要执行的指令。以下代码的作用是调用“e:\1.exe”程序。

    system("e:\\1.exe");

    在使用system()函数时,需要在程序中包含process.h或者stdlib.h头文件。

    2 _execl()函数

    _execl()函数的作用是导入并且执行新的子进程。该函数的格式为

    intptr_t _execl(const char* cmdname, const char *arg0, ..., NULL);

    该函数的第一个参数cmdname指定了要执行文件的路径;后面的arg系列的参数指定了执行该文件时的参数;最后一个参数必须是NULL

    _execl("e:\\1.exe","1", NULL);

    以上代码的作用是调用了e:\1.exe”程序,需要注意的是第二个参数必须是要执行文件的名称。

    使用_execl()函数时,需要在程序中包含process.h头文件。

    3 WinExec()函数

    WinExec()函数的作用是执行指定的程序。该函数的格式为

    UINT WINAPI WinExec(LPCSTR lpCmdLine, UINT uCmdShow);

    其中,第一个参数lpCmdLine指定了要执行程序绝对路径;第二个参数uCmdShow指定了显示执行程序的选项。

    WinExec("e:\\1.exe", SW_SHOW);

    以上代码调用了e:\1.exe”程序,SW_SHOW表示显示1.exe的窗口。

    4 CreateProcess()函数

    CreateProcess()函数的作用是在主线程中创建新的进程。该函数的格式为

    BOOL WINAPI CreateProcess(
    
      _In_opt_    LPCTSTR               lpApplicationName,
    
      _Inout_opt_ LPTSTR                lpCommandLine,
    
      _In_opt_    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    
      _In_opt_    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    
      _In_        BOOL                  bInheritHandles,
    
      _In_        DWORD                 dwCreationFlags,
    
      _In_opt_    LPVOID                lpEnvironment,
    
      _In_opt_    LPCTSTR               lpCurrentDirectory,
    
      _In_        LPSTARTUPINFO         lpStartupInfo,
    
      _Out_       LPPROCESS_INFORMATION lpProcessInformation
    
    );

    其中,参数lpApplicationName指定了要执行模块的名称;lpCommandLine指定了要执行的命令行;lpProcessAttributes指定了创建新进程的句柄能否被子进程所继承;lpThreadAttributeslpProcessAttributes指定了创建新进程的句柄能否被子线程所继承;bInheriteHandles指定了调用该函数的进程中每个可被继承的句柄是否被新进程继承;dwCreationFlags指定了优先类控制和进程创建的标志;lpEnvironment指定了新进程的环境区块;lpCurrentDirectory指定了要创建进程所在的路径;lpStartupInfo指定了创建进程时的信息;lpProcessInformation中保存了新创建进程的识别信息。

    CreateProcess()函数的参数虽然非常多,但是仅仅使用该函数调用外部程序时,大多数的参数都可以设置为NULL或者0

    STARTUPINFO si;
    
    PROCESS_INFORMATION pi;
    
    ZeroMemory(&si, sizeof(si));
    
    si.cb = sizeof(si);
    
    ZeroMemory(&pi, sizeof(pi));
    
    CreateProcess(_T("e:\\1.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);

    以上代码的作用是调用了e:\1.exe”程序。

    5 ShellExecute()函数

    ShellExecute()函数的作用是完成在指定文件上的操作。该函数的格式为

    HINSTANCE ShellExecute(
    
    HWND hwnd
    
    , LPCTSTR lpOperation
    
    , LPCTSTR lpFile
    
    , LPCTSTR lpParameters
    
    , LPCTSTR lpDirectory
    
    , INT nShowCmd
    
    );

    其中,参数hwnd指定了所有者窗口的句柄,该窗口用来显示用户界面或者错误信息;lpOperation指定了在文件上的操作;lpFile指定了要操作的文件;lpParameters指定了传递给应用程序的参数;lpDirectory指定了默认的路径;nShowCmd指定了显示文件窗口的方式。

    ShellExecute(NULL, _T("open"), _T("e:\\1.exe"), NULL, NULL, SW_SHOW);

    以上代码的作用是调用了e:\1.exe”程序,其中第二个参数_T("open")表示打开指定文件。

    展开全文
  • 单片机外部中断详解及程序

    千次阅读 2021-04-23 11:34:03
    单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来...

    单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
    实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。电路结构和接线不变,仅把程序改为下面的形式。
    #include <iom16.h>
    unsigned int t=500; //定义一个全局变量t,并设定初始值为500次
    //=延时子函数,在8MHz晶振时约1ms===
    void delay_ms(unsigned int k)
    {
    unsigned int i,j;
    for(i=0;i<k;i++)
    {
    for(j=0;j<1140;j++)
    ;
    }
    }
    //主函数======================
    void main( void )
    {
    DDRB = 0xFF; //设置端口B为输出方向
    PORTB = 0xFF; //设置端口B的输出为全高电平
    DDRD = 0x00; //设置端口D为输入方向
    PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态
    MCUCR = 0x0A; //设定INT0、INT1为下降沿触发
    GICR = 0xC0; //使能INT0、INT1中断
    SREG = 0x80; //使能总中断
    while(1)
    {
    PORTB = 0x55; //让接在端口B上的LED显示01010101
    delay_ms(t); //延时t个ms
    PORTB = 0xAA; //让接在端口B上的LED显示01010101
    delay_ms(t); //延时t个ms
    }
    }
    //中断函数(外部0)==============
    #pragma vector = INT0_vect
    __interrupt void INT0_Server(void)
    {
    t = 100; //设定t的值为100次
    }
    //中断函数(外部1)==============
    #pragma vector = INT1_vect
    __interrupt void INT1_Server(void)
    {
    t = 500; //设定t的值为500次
    }
    把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。下面就来分析一下键盘中断的程序原理。
    在分析程序之前,先来了解一下什么叫“外部中断”。前面已讲述过,在没有打扰的情况下,单片机的程序在封闭状态下自主运行,但如果在某一时刻需要响应一个外部事件(比如有按键被按下),这时就需要用外部中断。具体来讲,外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获到这个变化,单片机内部自主执行的程序就被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原程序。这个引脚上的电平变化,就申请了一个外部中断事件,而这个能申请外部中断的引脚就是外部中断的触发引脚。在上面的例子中,可以看到两个按键S1、S2被接到了ATMega16的PD3和PD2引脚,而这两个引脚正是该单片机的两个外部中断(INT1和INT0)的触发引脚(第二功能)。当按键没有按下时,这两个引脚都为高电平(执行过PORTD=0xFF),当按键被按下时,引脚电平跳变为低电平,这时若单片机设置成允许中断申请,就会触发外部中断事件,从而转去执行中断服务程序。明白了这个过程之后,接下来就可以分析程序了。
    程序执行后,主程序就一直在不停的运行while(1)内的这个死循环,让LED以t=500ms的初始值来交替闪烁,直到有外部中断来打断它。假设某一时刻按键S2被按下,这时由于引脚PD2上的电平突然被拉低,申请了一个外部中断0(INT0),这时的程序就转去执行外部中断0的中断服务程序(即__interrupt void INT0_Server(void)函数)。这时全局变量t的值被该函数重新赋值为100(即延时为100ms),完成后又回到主函数中的while(1)内去继续执行,因此LED闪烁的速度就变快了。
    观察程序可看出,如果没有中断去调用中断服务子程序,在主程序中是没有语句去调动它的。也就是说如果没有外部中断,中断服务子程序(即__interrupt void INT0_Server(void)函数)是永远不会被执行的。这也说明,中断服务子程序是一类特殊的子程序,它不能被主程序调用,只能被中断申请调用。因此,中断服务子程序有它固定的格式和写法。在不同的编译系统中的写法不完全一样,下面给出IAR下的中断服务子程序的格式。
    #pragma vector = INT0_vect
    __interrupt void INT0_Server(void)
    {
    中断服务程序代码
    }
    以上是固定格式,除斜体部分外,其余部分不可更改。斜体部分中的INT0_vect表示中断的向量号,不同的中断名称不一样(原型在头文件iom16.h中)。斜体部分中的INT0_Server是中断函数的名称,是由开发者自己定义的。虽然可以自定义,但名称还是要取得“见名知义”,这样一看就知道是什么中断服务了。

    展开全文
  • Qt 之启动外部程序

    万次阅读 多人点赞 2016-01-07 20:41:55
    QProcess可以用来启动外部程序,并与它们交互。要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。另外,也可以使用setProgram()和setArguments()来...
  • Powershell实战之运行外部程序

    千次阅读 2018-07-11 15:19:00
    在powershell中运行外部程序时,可以通过在程序后面加上两条短横杠,把程序传送至cmd中运行。 c:\windows\system32\sc.exe --% qc bits 但是这种方法有局限性,无法向里面传递参数。例如上面的代码中,将bits...
  • 程序已悄悄的开放了从外部跳转至小程序的入口,方便用户可以在微信外部浏览器或其他APP跳转至微信小程序。 先上测试链接 体验爽一把【已支持从任意外部跳转至微信小程序外部直接跳转进入微信小程序的方法汇总...
  • 外部链接跳转微信小程序

    千次阅读 2021-05-22 18:06:10
    外部链接跳转微信小程序 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpcKl0T3-1621677958755)(image-20210416142912242.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存...
  • 自从开放了微信小程序的云开发功能,无论是程序员还是用户都能得到更好的体验,目前更是开放了访问微信小程序云开发数据库的api,以后做小程序的项目肯定会遇到外部系统访问小程序云开发数据库的场景,在此做一个...
  • 在开发的过程中,我定义了一个公共组件,但在我的设计稿上面,这个公共组件距离内容的margin-bottom是不同的,所以我需要在父组件引用这个组件的时候,在父组件的css中设置他的样式,查阅小程序文档,找到了外部样式...
  • 1、启动外部程序:Process.Start();及其多个重载; 2、接收传参:Environment.GetCommandLineArgs(); 3、关闭程序: Process.GetCurrentProcess().Kill(); 关闭自身 Path.GetFileNameWithoutExtension(Process....
  • C#调用外部程序的两种方法

    千次阅读 2018-11-08 11:12:29
    我是文明,以下即代表我的个人认同与看法,有不同看法的可以留言哈,谢谢你的...c# 调用外部程序 exe: 进程调用: Process process = new Process(); process.StartInfo.UseShellExecute = false; //必要参数 ...
  • 微信小程序引用外部字体

    万次阅读 热门讨论 2018-06-29 15:39:00
    两种方式引入字体 第一种是转换成base64的,但是太占用空间,不推荐使用; 第二种方法是,通过引用服务器上的url。 ...1、找到字体包ttf、eot、svg、woff随便一种...app.css引入外部url字体库,就可以直接使用了。
  • PYQT5内嵌外部exe程序(win7)

    千次阅读 2017-06-24 09:29:24
    首先通过Spy++查看窗口名称,找到需要内嵌exe程序的位置 02 通过新建子线程来运行exe程序,然后获取它的句柄,这样可以通过句柄来获取它的整个窗体 注:句柄是动态分配的 03 准备编码,先用PYQT写一个QMainWindow...
  • Qt中启动外部程序

    千次阅读 2018-06-11 20:26:57
    Qt中启动外部程序 在Qt中启动外部程序较简单,上代码: QProcess process; process.start("notepad.exe"); 这样就启动了一个记事本程序。 这里增加点难度,只允许当前系统中运行一个记事本程序。 ...
  • } </style> 1:配置使用位置权限 踩坑:page.json的配置文件编译到微信小程序的时候发现不见了,需要在app.json重新手动配置官方文档踩坑说明 app.json/page.json官方配置文档 配置Key 下载SDK 示例全局代码:
  • 在小程序开发的时候,我们有时候需要自定义或者封装一个小组件用到多处导入使用,怎么样才能使用外部设置进来的 class 或者 style 样式呢。 通过 externalClasses 既可以导出当前组件需要外部设置的 class 属性,...
  • 程序如何添加外部字体库

    万次阅读 2018-09-09 15:34:23
    所以小程序里面引入外部字体就是一个比较常见的功能了。 一般的css添加字体使用@font-face属性来实现,代码如下: @font-face { font-family: '字体名称'; src: url("../../resources/font/UKIJTuzTom.eot&...
  • C# 调用外部exe程序

    千次阅读 2018-10-17 15:58:06
    这里就是一个调用外部程序的方法。 /// &lt;summary&gt; /// 通过进程调用外部程序 /// &lt;/summary&gt; /// &lt;param name="exePath"&gt;&lt;/p...
  • 原因:未安装yarn 解决方法: 安装yarn (在控制终端或cmd运行以下代码) npm install -g yarn 后续若还有问题,如 这时候就开管理者模式到cmd再来一次 这样就大概应该也许没什么问题了 不要问为啥,问就是就错...
  • 另:如果是用PowerShell出现的报错:export : 无法将“export”项识别为 cmdlet、函数、脚本文件或可运行程序名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 解决方法:使用$env:GO111...
  • PHP调用外部程序的方法

    万次阅读 2017-02-05 13:59:34
    在PHP中调用外部命令,可以用如下三种方法来实现:   方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec() 1)exec() 原型: string ...
  • 微信小程序打开内置地图并通过外部地图进行导航

    千次阅读 热门讨论 2020-07-08 09:12:30
    要显示地图并可以实现导航时,只需要调用如下函数,然后传入要显示在地图中的经纬度和要进行导航的位置名称 /** *查看位置 *latitudelongitude表要展示在地图中的经纬度 *name表示要导航的位置名称 */ ...
  • 在这里列举三种情况:在程序中,纯粹打开外部应用程序、纯粹关闭外部应用程序、打开应用程序后过会儿再关闭它。 我在这里只讲方法,不讲原理(因为windows api 太恶心了) 1,纯粹打开外部应用程序:使用...
  • 1、检测node的安装 安装过node之后,window + R,输入cmd,之后输入node -v 和npm -v 看看node安装的成功与否 2、 搜索vue.cmd,找到之后打开文件地址,并复制路径 3、进行path的配置 ...
  • Chrome加载外部扩展程序控件的方法

    千次阅读 2019-09-19 14:05:31
    Step1:打开扩展程序功能 打开Chrome浏览器,找到“更多”中的“更多工具”,点击“扩展程序”。 Step2:打开开发者模式 打开“开发者模式”。 Step3:加载扩展程序控件crx文件 将扩展程序控件crx文件直接...
  • C# Process 类调用外部exe 程序 Stop Working 异常   1. 异常描述   2. 描述: 3. Stopped working 4.  5. 问题签名: 6. 问题事件名称:CLR20r3 7. 问题签名 01:phoenix_label.exe 8. ...
  • fastboot和adb不是内部或者外部命令完美解决方案下载-西西软件下载 (cr173.com) 解压 复制文件到对应目录 将名称中含有adb和fastboot.exe复制到 c:/windows/system32下 然后再将名称中含有adb的所有文件复制到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 405,139
精华内容 162,055
关键字:

外部该程序名称