Applescript 中的错误 -10004 和错误 -10000 是什么 [英] What are error -10004 and error -10000 in Applescript

查看:35
本文介绍了Applescript 中的错误 -10004 和错误 -10000 是什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Applescript 可以在我的电脑上运行,但不能在我同事的电脑上运行.操作路径时出现两个错误:-10004-10000.我有一个关于如何解决这个问题的想法,但首先我想了解那些错误代码.

I have an Applescript that is working on my computer, but not on my colleague's. I get two errors when manipulating paths: -10004 and -10000. I have an idea on how to solve this, but first I'd like to understand those error codes.

这是脚本(我删除了无用的部分,完整版在 github):

Here is the script (I removed useless part, the full version is on github):

-- export all layers to image files

-- Settings
property exportFileExtension : "png"
property ADD_CANVAS_NUMBER : true
-- End of Settings

on file_exists(FileOrFolderToCheckString)
   try
       alias FileOrFolderToCheckString
       return true
   on error
       return false
   end try
end file_exists

tell application "OmniGraffle Professional 5"
    set theWindow to front window
    set theDocument to document of theWindow
    set theFilename to name of theDocument
    -- remove .graffle
    -- FIRST ERROR IS HERE -10004
    set theFilename to text 1 thru ((offset of "." in theFilename) - 1) of theFilename

    set export_folder to (choose folder with prompt "Pick the destination folder") as string
    set export_folder to export_folder & theFilename & ":"

    -- create folder
    if file_exists(export_folder) of me then
        try
            display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
        on error errText number errNum
            if (errNum is equal to -128) then
                return
            end if
        end try

        -- deletes the folder (necessary because some layers may have been renamed
        do shell script "rm -rf " & quoted form of POSIX path of export_folder

    else
        -- creates the folder
        do shell script "mkdir -p " & quoted form of POSIX path of export_folder
    end if

    set canvasCount to count of canvases of theDocument

    set i to 0
    repeat with canvasNumber from 1 to canvasCount
        set theCanvas to canvas canvasNumber of theDocument
        set canvas_name to name of theCanvas
        set canvas of theWindow to theCanvas
        set layerCount to count of layers of theCanvas

        -- ...

        set area type of current export settings to current canvas
        set draws background of current export settings to false
        set include border of current export settings to false

        set canvas_filename to ""
        -- ...
        set canvas_filename to canvas_filename & canvas_name

        repeat with layerNumber from 1 to layerCount
            set theLayer to layer layerNumber of theCanvas

            if (theLayer is prints) and (class of theLayer is not shared layer) then
                set layer_name to name of theLayer as string
                set filename to canvas_filename & " - " & layer_name & "." & exportFileExtension
                set export_filename to export_folder & filename

                -- show the layer, export, then hide the layer
                if character 1 of layer_name is not "*" then
                    set visible of theLayer to true
                    -- SECOND ERROR IS HERE -1000
                    save theDocument in export_filename
                    set visible of theLayer to false
                end if

            end if

        end repeat

    end repeat
end tell

这是日志:

tell application "OmniGraffle Professional 5"
   get window 1
       --> window id 5032
   get document of window id 5032
       --> document "MSD.graffle"
   get name of document "MSD.graffle"
       --> "MSD.graffle"
   offset of "." in "MSD.graffle"
       --> error number -10004
end tell
tell current application
   offset of "." in "MSD.graffle"
       --> 4
end tell
tell application "OmniGraffle Professional 5"
   choose folder with prompt "Pick the destination folder"
       --> alias "Macintosh HD:Users:Romain:Desktop:Temp:"
   display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
       --> {button returned:"Erase"}
   do shell script "rm -rf '/Users/Romain/Desktop/Temp/MSD/'"
       --> error number -10004
end tell
tell current application
   do shell script "rm -rf '/Users/Romain/Desktop/Temp/MSD/'"
       --> ""
end tell
tell application "OmniGraffle Professional 5"
...
...
   save document "MSD.graffle" in "Macintosh HD:Users:Romain:Desktop:Temp:MSD:1- Navigation - 1Layout.png"
       --> error number -10000
Result:
error "OmniGraffle Professional 5 got an error: AppleEvent handler failed." number -10000

谢谢!

我更新了脚本,但仍然出现错误 -10000.以下是修改后的行:

I updated the script but I still get error -10000. Here are the modified lines:

save theDocument in file exportFilename

-- Create folder if does not exist, remove it otherwise
-- Shell script should not be executed inside tell application block
if file_exists(export_folder) of me then
    try
        display alert "The file already exists. Do you want to replace it?" buttons {"Cancel", "Erase"} cancel button 1
    on error errText number errNum
        if (errNum is equal to -128) then
            return
        end if
    end try

    tell me
        -- Delete the folder
        do shell script "rm -rf " & quoted form of POSIX path of export_folder
    end tell

else
    tell me
        -- Create the folder
        do shell script "mkdir -p " & quoted form of POSIX path of export_folder
    end tell
end if

推荐答案

错误 -10000 - -10015 是事件注册表错误.

Errors -10000 - -10015 are event registry errors.

错误 -10000 本身并不是目标错误,因为在大多数情况下它会抛出 -1708.大多数情况下,这不是目标错误,而是不完整的命令或括号的错误使用.如果你使用:

Error -10000 is not a target error per se, because it will throw an -1708 in those cases mostly. most of the time it is not a target error but an incomplete command or wrong usage of brackets. What if you use:

save theDocument in file export_filename

错误 -10004 是特权冲突错误,这意味着您正在对文件进行不允许的操作.可能您不允许删除该文件,并且应始终在 tell 应用程序块之外使用 do shell script 命令.问题是目标应用程序可以作为脚本以外的其他用户运行.我不是说这是错误,但有可能这就是问题所在.否则,您只是没有足够的权限,您需要向用户询问管理员权限.

Error -10004 is a privilege violation error, which mean you're doing something with the file that isn't allowed. Probably you're not allowed to remove the file and do shell script command should always be used outside tell application blocks. The problem is that the target application can run as another user than the script. I'm not saying it is the error but there is a chance that it this is the problem. Otherwise you simply heve not enough privileges and you need to ask the user for administrator privileges.

do shell script "do something" with administrator privileges.

这篇关于Applescript 中的错误 -10004 和错误 -10000 是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆