解决使用C#打开第三方应用后进程关联问题

2021-03-14 06:48

阅读:423

标签:int   获取路径   打开   returns   存在   描述   inf   pat   return   

问题描述 :

    打开开进程后调用第三方应用 , 关闭主应用时第三方应用也会关闭 

    (我这里要求第三方应用不能被关闭)

    代码如下:

        /// 
        /// 打开文件选择框获取路径
        /// eg:
        /// Cef.OpenApplication("**.exe");
        /// 
        /// 
        public void OpenApplication(string appName)
        {

            string dirpath = Application.StartupPath;
            if (!File.Exists(dirpath+"\\"+appName))
            {
                MessageBox.Show("启动失败,文件不存在");
                return;
            }
            
            //System.Diagnostics.Process.Start(dirpath + "\\" + appName);
            ShellExecute(IntPtr.Zero, new StringBuilder("Open"), 
                new StringBuilder(appName), new StringBuilder(""), new StringBuilder(dirpath), 1);
        }

        /// 
        /// 打开第三方应用
        /// 示例 :
        /// ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder("test.exe"), new StringBuilder(""), new StringBuilder(@"C:\文件夹名"), 1);
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        [DllImport("shell32.dll")]
        public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);

查看进程时发现进程被关联了

技术图片

 

 

 

解决方案 :

使用资源管理器打开第三方应用 , 就像手动执行的结果一样

技术图片

 

 

代码如下 : 

/// 
        /// 打开文件选择框获取路径
        /// eg:
        /// Cef.OpenApplication("**.exe");
        /// 
        /// 
        public void OpenApplication(string appName)
        {

            string dirpath = Application.StartupPath;
            if (!File.Exists(dirpath+"\\"+appName))
            {
                MessageBox.Show("启动失败,文件不存在");
                return;
            }

            System.Diagnostics.Process.Start("Explorer.exe", dirpath + "\\" + appName);
//ShellExecute(IntPtr.Zero, new StringBuilder("Open"), // new StringBuilder("Explorer"), new StringBuilder(dirpath + "\\" + appName), new StringBuilder(""), 1);//好使,会多打开多一个explorer.exe //System.Diagnostics.Process.Start(dirpath + "\\" + appName); //ShellExecute(IntPtr.Zero, new StringBuilder("Open"), // new StringBuilder(appName), new StringBuilder(""), new StringBuilder(dirpath), 1); }

 打开程序时有可能会弹出杀毒软件阻止窗口 , 如下

技术图片

 

 

附 : 

使用  Process.Start("Explorer.exe", dirpath + "\\" + appName);打开应用后附进程不存在

技术图片

 

 使用 

ShellExecute(IntPtr.Zero, new StringBuilder("Open"),
new StringBuilder("Explorer"), new StringBuilder(dirpath + "\\" + appName), new StringBuilder(""), 1);

打开应用后 , 任务管理器中会出现两个 explorer.exe 进程

解决使用C#打开第三方应用后进程关联问题

标签:int   获取路径   打开   returns   存在   描述   inf   pat   return   

原文地址:https://www.cnblogs.com/hi-gdl/p/12496882.html


评论


亲,登录后才可以留言!