Actionscript 3 有没有办法用AdobeAIR生成快捷方式文件?

Actionscript 3 有没有办法用AdobeAIR生成快捷方式文件?,actionscript-3,apache-flex,air,filesystems,adobe,Actionscript 3,Apache Flex,Air,Filesystems,Adobe,下午好, 我想创建一个应用程序,可以在文件系统中创建文件夹和文件夹的快捷方式。用户将单击一个按钮,它将在桌面上放置一个文件夹,该文件夹具有指向//server/folder1/folder2等文件的快捷方式您可以使用adobe air中的代码创建桌面快捷方式吗?你会怎么做?如何创建文件夹?我一直认为这应该很容易,但我一直错过它 谢谢您的帮助,很抱歉给您添麻烦, Justin据我所知,File类不允许创建符号链接。但是您可以使用createDirectory()创建目录: 检查这是否有用:如果您的

下午好,
我想创建一个应用程序,可以在文件系统中创建文件夹和文件夹的快捷方式。用户将单击一个按钮,它将在桌面上放置一个文件夹,该文件夹具有指向//server/folder1/folder2等文件的快捷方式您可以使用adobe air中的代码创建桌面快捷方式吗?你会怎么做?如何创建文件夹?我一直认为这应该很容易,但我一直错过它
谢谢您的帮助,很抱歉给您添麻烦,

Justin据我所知,File类不允许创建符号链接。但是您可以使用
createDirectory()
创建目录:


检查这是否有用:

如果您的部署配置文件是,您可以使用和一些简单的脚本,这些脚本可以与应用程序打包。这种方法需要在每个操作系统的基础上处理功能,这需要一些工作和广泛的测试。然而,我想至少分享一个我验证过的场景。下面是我编写的一个测试用例:

测试用例:Windows7 尽管如此,显然它并没有阻止用户执行Windows脚本主机:wscript.exe。这意味着您可以执行任何JScript或VBScript文件。这就是您在Windows中编写创建快捷方式的命令所用的方法(因为Windows没有创建快捷方式的命令行命令)

下面是一个创建快捷方式命令的简单脚本,我在(转换为JScript)上找到了该脚本:

如果将其打包到应用程序中名为utils的文件夹中,则可以编写一个函数来创建快捷方式,如下所示:

public function createShortcut(target:File, shortcut:File):void {
  if (NativeProcess.isSupported) { // Note: this is only true under extendedDesktop profile
    var shortcutInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

    // Location of the Windows Scripting Host executable
    shortcutInfo.executable = new File("C:/Windows/System32/wscript.exe");

    // Argument 1: script to execute
    shortcutInfo.arguments.push( File.applicationDirectory.resolvePath("utils/mkshortcut.js").nativePath);

    // Argument 2: target
    shortcutInfo.arguments.push("/target:" + target.nativePath);

    // Argument 3: shortcut
    shortcutInfo.arguments.push("/shortcut:" + shortcut.nativePath);

    var mkShortcutProcess = new NativeProcess();
    mkShortcutProcess.start(shortcutInfo);

  }
}
如果要在桌面上创建应用程序存储目录的快捷方式,以下操作就足够了:

var targetLocation:File = File.applicationStorageDirectory;
var shortcutLocation:File = File.desktopDirectory.resolvePath("Shortcut to My AIR App Storage");

createShortcut(targetLocation, shortcutLocation);


显然,要处理不同的操作系统环境,还有很多工作要做,但这至少是一个步骤。

Air不允许您以本机方式创建快捷方式。这里有一个适用于Windows的解决方案[可能适用于Mac,但我没有要测试的机器]

使用Air创建包含以下纯文本的文件

[InternetShortcut]
URL=C:\path-to-folder-or-file
用文件夹/文件名替换文件夹或文件的路径

将文件另存为
test.url


Windows将此文件识别为快捷方式。

可以强制AdobeAIR在Mac上创建符号链接和其他有用的东西。我是这样做的:

您需要AirAlias.js-修订版:2.5

在application.xml中添加:

<!-- Enables NativeProcess -->
<supportedProfiles>extendedDesktop desktop</supportedProfiles>

扩展桌面
在Air应用程序JavaScript中:

//    A familiar console logger 
var console = {
    'log' : function(msg){air.Introspector.Console.log(msg)}
};

if (air.NativeProcess.isSupported) {
    var cmdFile = air.File.documentsDirectory.resolvePath("/bin/ln");

    if (cmdFile.exists) {
        var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
        var processArgs = new air.Vector["<String>"]();

        nativeProcessStartupInfo.executable = cmdFile;
        processArgs.push("-s");
        processArgs.push("< source file path >");
        processArgs.push("< link file path >");
        nativeProcessStartupInfo.arguments = processArgs;
        nativeProcess = new air.NativeProcess();
        nativeProcess.addEventListener(air.NativeProcessExitEvent.EXIT, onProcessExit);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onProcessOutput);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onProcessError);
        nativeProcess.start(nativeProcessStartupInfo);
    } else {
        console.log("Can't find cmdFile");
    }
} else {
    console.log("Not Supported");
}

function onProcessExit(event) {
    var result = event.exitCode;
    console.log("Exit Code: "+result);
};

function onProcessOutput() {
    console.log("Output: "+nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable));
};

function onProcessError() {
    console.log("Error: "+nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable));
};
//熟悉的控制台记录器
变量控制台={
'log':函数(msg){air.Introspector.Console.log(msg)}
};
if(air.NativeProcess.isSupported){
var cmdFile=air.File.documentsDirectory.resolvePath(“/bin/ln”);
如果(cmdFile.exists){
var nativeProcessStartupInfo=new air.nativeProcessStartupInfo();
var processArgs=new air.Vector[“”]();
nativeProcessStartupInfo.exe=cmdFile;
进程args.push(“-s”);
processArgs.push(“”);
processArgs.push(“”);
nativeProcessStartupInfo.arguments=processArgs;
nativeProcess=new air.nativeProcess();
nativeProcess.addEventListener(air.nativeProcessExiteEvent.EXIT,onProcessExit);
nativeProcess.addEventListener(air.ProgressEvent.STANDARD_输出_数据,onProcessOutput);
nativeProcess.addEventListener(air.ProgressEvent.STANDARD_ERROR_数据,onProcessError);
nativeProcess.start(nativeProcessStartupInfo);
}否则{
log(“找不到cmdFile”);
}
}否则{
console.log(“不支持”);
}
函数onProcessExit(事件){
var结果=event.exitCode;
console.log(“退出代码:+结果”);
};
函数onProcessOutput(){
log(“输出:+nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable));
};
函数onProcessError(){
log(“错误:+nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable));
};

更改传递给NativeProcess的命令和参数的语法,您也应该能够在Windows上获得真正的快捷方式。

您的概述是我发布第二条的原因link@AsTheWormTurns-是的,我在发布答案之前看过了。老实说,里面的材料已经过时了(发布于2008年;目标是AIR 1.0),只有对NativeProcess的概念历史感兴趣(在AIR 2.0中引入;现在发布了3.1)时才有价值。尽管如此,我还是对你的答案做了+1,因为你是正确的,File类缺乏创建快捷方式的能力,CommandProxy示例中演示的概念方向正确。这真的很好!我必须试一试,但它看起来像我一直在寻找的东西。谢谢你的帮助!知道您可以使用JScript真的很好,因为还有其他可能的事情。随着FlashBuilder4.6的发布,我想知道把它变成本机扩展有多难?
//    A familiar console logger 
var console = {
    'log' : function(msg){air.Introspector.Console.log(msg)}
};

if (air.NativeProcess.isSupported) {
    var cmdFile = air.File.documentsDirectory.resolvePath("/bin/ln");

    if (cmdFile.exists) {
        var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
        var processArgs = new air.Vector["<String>"]();

        nativeProcessStartupInfo.executable = cmdFile;
        processArgs.push("-s");
        processArgs.push("< source file path >");
        processArgs.push("< link file path >");
        nativeProcessStartupInfo.arguments = processArgs;
        nativeProcess = new air.NativeProcess();
        nativeProcess.addEventListener(air.NativeProcessExitEvent.EXIT, onProcessExit);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onProcessOutput);
        nativeProcess.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onProcessError);
        nativeProcess.start(nativeProcessStartupInfo);
    } else {
        console.log("Can't find cmdFile");
    }
} else {
    console.log("Not Supported");
}

function onProcessExit(event) {
    var result = event.exitCode;
    console.log("Exit Code: "+result);
};

function onProcessOutput() {
    console.log("Output: "+nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable));
};

function onProcessError() {
    console.log("Error: "+nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable));
};