每当您尝试启动没有关联文件类型的应用程序时,Windows 上的“打开方式...”对话框就会显示。使用 NativeProcess.start() 启动应用程序,Windows 将负责使用正确的程序打开它,或者如果没有关联的文件类型,则显示一个选择屏幕。
或者,根据您尝试执行的操作,您可能有兴趣将文件类型与您的 AIR 应用程序相关联。例如,您可以将 PNG 文件与您的 AIR 应用程序相关联,以便它们默认在您的 AIR 应用程序中打开(例如,双击 PNG 文件将启动您的应用程序,并带有一个指定已打开的 PNG 文件的 INVOKE 事件)。有关详细信息,请参阅“声明文件类型关联”下的http://livedocs.adobe.com/flex/3/html/help.html?content=File_formats_1.html 。
当然,您的 AIR 应用程序可能无法处理打开您尝试打开的任何文件,并且您需要其他程序来处理它,在这种情况下,您可以使用第一种方法,让操作系统负责启动具有正确程序的应用程序。
编辑 :
我对 Native Process 的实际作用感到困惑。NativeProcess 启动可执行文件 - 而不是文件,因此上述方法不起作用。
与其尝试直接使用 NativeProcess 打开文件,不如尝试打开您想要打开文件的程序并将文件作为参数传入。例如,如果你想用一些特殊的图像程序打开一个 PNG 文件,你可以这样做:
var imageEditorProgram:File = new File("C:/Path/To/Program.exe");
var args:Vector.<String> = new Vector.<String>();
args.push("C:/Path/To/Image.png");
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.executable = imageEditorProgram;
nativeProcessStartupInfo.arguments = args;
var nativeProcess:NativeProcess = new NativeProcess();
nativeProcess.start(nativeProcessStartupInfo);
这应该会打开带有传入图像文件的图像编辑程序。
但是,这种方法的缺点是您不能只让操作系统确定使用哪个程序打开文件。您应该能够打开文件浏览对话框并允许用户选择打开文件的程序(类似于操作系统的操作方式)。因此,希望以下内容可以满足您的要求:
var file:File = File.userDirectory;
file.addEventListener(Event.SELECT, selectHandler);
file.browse();
private function selectHandler(e:Event):void{
file.removeEventListener(Event.SELECT, selectHandler);
var filePath:String= file.nativePath;
var imageEditorProgram:File = new File(filePath);
var args:Vector.<String> = new Vector.<String>();
args.push("C:/Path/To/Image.png");
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.executable = imageEditorProgram;
nativeProcessStartupInfo.arguments = args;
var nativeProcess:NativeProcess = new NativeProcess();
nativeProcess.start(nativeProcessStartupInfo);
}
我没有测试上面的代码,但它应该打开一个文件浏览对话框,允许用户选择一个程序来打开文件(也许你应该添加一个 FileFilter 来限制用户只选择.exe),然后启动该程序使用 NativeProcess。
为了用户友好,您应该考虑保存用户对文件类型的首选项(因此,不要强迫他们每次想要打开 PNG 时都通过文件浏览器,只要记住他们喜欢用 AwesomeImageEditor.exe 打开 PNG)。