我想请求帮助从c#app打开一个带有相关应用的文件。 我试过这个:
ProcessStartInfo pi = new ProcessStartInfo(file);
pi.Arguments = Path.GetFileName(file);
pi.UseShellExecute = true;
pi.WorkingDirectory = Path.GetDirectoryName(file);
pi.FileName = file;
pi.Verb = "OPEN";
Process.Start(pi);
或者这个:
Process.Start(file);
其中两个示例中的字符串file
表示尝试打开的文件的完整路径。现在,除了使用ACDSee应用程序的(jpg)图像外,一切运行良好。 Irfanview协会运作良好,MS办公室文件也是如此。在尝试打开与acdsee关联的jpg图像后,它只是在通知区域中运行acdsee并且不会打开文件。
我发现,在* .jpg图片的注册表 CLASSES_ROOT 中,有一个ACDSee.JPG值作为关联应用,并且在此键下有 shell->打开 - >命令路径:
"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde
我认为这个奇怪的/dde
是原因,为什么我无法打开文件。我意识到,在相同的注册表项 shell->打开中,有一些DDEExec
键值条目[open("%1")]
对于Irfan视图或其他已检查的应用程序,没有ddeexec,只有正常的命令,如
"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1"
可以在交换文件名的%1后从命令行运行,但我无法在命令行中从acdsee条目运行命令:(
所以我的问题是,我如何设置ProcessStartInfo
对象确保它将运行所有文件,因为它将在资源管理器中通过双击,标准和此DDEExec
个?我还应该注意其他像DDEExec
这样的东西吗?
谢谢,对不起我的EN
答案 0 :(得分:102)
只需写下
System.Diagnostics.Process.Start(@"file path");
示例
System.Diagnostics.Process.Start(@"C:\foo.jpg");
System.Diagnostics.Process.Start(@"C:\foo.doc");
System.Diagnostics.Process.Start(@"C:\foo.dxf");
...
shell将运行从注册表中读取它的相关程序,就像通常的双击一样。
答案 1 :(得分:14)
这是一个旧线程,但万一有人遇到它像我一样。 需要将pi.FileName设置为要用于打开文件的可执行文件的文件名(以及可能的文件的完整路径)。以下代码适用于我使用VLC打开视频文件。
var path = files[currentIndex].fileName;
var pi = new ProcessStartInfo(path)
{
Arguments = Path.GetFileName(path),
UseShellExecute = true,
WorkingDirectory = Path.GetDirectoryName(path),
FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe",
Verb = "OPEN"
};
Process.Start(pi)
Tigran的答案有效,但会使用Windows的默认应用程序打开您的文件,因此如果您想使用非默认应用程序打开文件,使用ProcessStartInfo可能会很有用。
答案 2 :(得分:1)
在 .Net Core (自v2.2起)中,它应该是:
adapter.setOnItemRemoveListener(new RemoveItemAdapter.OnItemRemoveListener() {
@Override
public void onItemRemove(int position) {
//Do I send it from here?
}
});
相关的github问题可以找到here