我写了两个苹果脚本,以便我的妻子可以启动mt-daapd并轻松关闭它。它们在脚本编辑器应用程序中运行良好,但当我将它们编译成独立的应用程序时,应用程序在我第一次测试它们时工作。然后他们让我难堪,因为我自豪地把它们展示给我的妻子。我看到“开放”的动画,然后他们就坐在那里。我以前创建了其他独立应用程序,但事实并非如此。
我尝试将应用类型更改为捆绑(同样的问题)。我甚至尝试通过gdb附加到可执行文件,看看我是否可以打破魔法来告诉我发生了什么。我查看了控制台中的一些信息。什么都没有。脚本在我脸上笑了起来。
如何解决此问题?
我已经包含了下面的一个脚本;第二个几乎是一样的。我正在运行10.5.8。
property userpassword : ""
if userpassword is "" then
display dialog "Please enter your user password:" default answer "" with hidden answer
set userpassword to text returned of result
set the_password to "Undefined"
repeat until the_password is "Correct"
try
do shell script "/opt/local/sbin/mt-daapd -c /etc/mt-daapd.conf" password userpassword with administrator privileges
set the_password to "Correct"
on error
display dialog "Sorry, the password entered was not correct. Please try again:" default answer "" with hidden answer
set userpassword to text returned of result
end try
end repeat
if the_password is "Correct" then
display dialog "Your music is being shared!" buttons {"Done"} default button "Done"
end if
end if
答案 0 :(得分:1)
我不确定这是怎么回事,但是脚本在调用之间保存userpassword
的值,所以一旦它被设置为任何值,它就会保留该值并退出程序。在看了我如何创建其他独立应用程序后,我发现了这一点。
答案 1 :(得分:1)
属性不是固定的,它们就像任何其他对象的属性一样。您可以在运行时更改它们,也可以从其他脚本更改它们。所以如果你的script1是
property potato: "potayto"
say potato
并且您运行了另一个脚本
set potato of script1 to "potahto"
然后再次运行script1会让你的电脑说“potahto”。
属性可以是在脚本中存储首选项的有用方法。
只需删除第一个if语句,无论如何都是多余的。检查密码是否正确,而不是密码是否为空。
因此:
property userpassword :""
set the_password to "Undefined"
repeat until the_password is "Correct"
try
do shell script "/opt/local/sbin/mt-daapd -c /etc/mt-daapd.conf" password userpassword with administrator privileges
set the_password to "Correct"
on error
display dialog "Sorry, the password was not correct. Please try again:" default answer "" with hidden answer
set userpassword to text returned of result
end try
end repeat
if the_password is "Correct" then
display dialog "Your music is being shared!" buttons {"Done"} default button "Done"
end if