c#在调用Process.Start方法时遇到的一个小问题

无聊时写了一个视频管理程序,其中一个小功能是调用视频软件打开某个视频,其方法为:
Process.Start(tsmi.site, filePath);

之前一直没出问题,直到最近从电影天堂下载了一个电影《盲点》(顺便推荐一下),以往下载后的文件名中都没有空格,但这次不知道什么原因,文件名中出现了空格,然后调用这个函数后,迅雷看看出现了提示“该文件不存在,可能已经删除”。开始以为是迅雷看看的问题,然后又调用了PPTV,发现仍然出现了相同的问题,这时候仔细查看发现了可能是文件路径中出现了空格导致的问题。于是我用输出方式输出了filePath,发现字符串并未截断(废话,什么时候string类型会自动通过空格截断字符串了?),然后去网上查了下原因,最终看到了一个解答:

“正确的写法应该是: 
Process p=Process.Start("\""+t_path.Text.ToString()+"\"","\""+t_file.Text.ToString()+"\""); ”

上述的解决方案就是将路径地址用引号括起来,这种方法在调用cmd命令时也经常使用,就是在cd文件夹路径时,用引号包住路径可以解决路径带空格而无法正确进入文件夹的问题。

附:

c# 路径空格---ProcessStartInfo参数问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 WPS 中打开多个工作簿,每个工作簿都会启动一个独立的 WPS 进程。如果你想在 C#调用 `Application.WorksheetFunction.RTD` 函数,并确保该函数调用的 `Application` 对象是同一个对象,可以使用以下方法: 1. 使用 `WPS.Application` 对象的 `GetActiveObject` 方法获取当前正在运行的 WPS 进程; 2. 通过 `Process` 对象的 `ProcessName` 属性和 `MainWindowTitle` 属性,获取指定的 WPS 进程句柄; 3. 使用 `Marshal` 类的 `GetObjectForIUnknown` 方法将 WPS 进程句柄转换为 `WPS.Application` 对象; 4. 使用获取到的 `WPS.Application` 对象调用 `Application.WorksheetFunction.RTD` 函数。 以下是示例代码: ``` using System.Diagnostics; using System.Runtime.InteropServices; // 获取当前正在运行的 WPS 进程 dynamic wps = null; try { wps = Marshal.GetActiveObject("KWPS.Application"); } catch (COMException ex) { // 如果没有找到 WPS 进程,则打开 WPS Process.Start("wps.exe"); // 等待 WPS 启动 System.Threading.Thread.Sleep(3000); wps = Marshal.GetActiveObject("KWPS.Application"); } // 获取指定的 WPS 进程句柄 Process[] processes = Process.GetProcessesByName("wps"); IntPtr wpsHandle = IntPtr.Zero; foreach (Process process in processes) { if (process.MainWindowTitle.Contains("Microsoft Excel - Book1")) { wpsHandle = process.MainWindowHandle; break; } } // 将 WPS 进程句柄转换为 WPS.Application 对象 if (wpsHandle != IntPtr.Zero) { Guid guid = new Guid("00024500-0000-0000-C000-000000000046"); object obj = null; int hr = Marshal.GetActiveObject(guid, wpsHandle, out obj); wps = obj as dynamic; } // 调用 Application.WorksheetFunction.RTD 函数 if (wps != null) { object result = wps.Application.WorksheetFunction.RTD("MyRTD", "", "Symbol"); // 处理返回值 } ``` 在上述代码中,我们首先尝试使用 `Marshal.GetActiveObject` 方法获取当前正在运行的 WPS 进程,如果没有找到 WPS 进程,则打开 WPS。然后,我们使用 `Process` 对象的 `ProcessName` 属性和 `MainWindowTitle` 属性,获取指定的 WPS 进程句柄。接着,我们使用 `Marshal.GetObjectForIUnknown` 方法将 WPS 进程句柄转换为 `WPS.Application` 对象,并使用获取到的 `WPS.Application` 对象调用 `Application.WorksheetFunction.RTD` 函数。这样可以确保 `Application` 对象是同一个对象,从而避免调用 `Application.WorksheetFunction.RTD` 函数出现问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值