0

在我的自动更新程序应用程序中,我正在下载一个包含新 MyApp.app 应用程序文件的压缩文件。所以我正在下载 MyApp.zip .. 然后我使用下面这个类来尝试解压缩它:

package update;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class UnZip {

  public static final void copyInputStream(InputStream in, OutputStream out)
  throws IOException
  {
    byte[] buffer = new byte[1024];
    int len;

    while((len = in.read(buffer)) >= 0)
      out.write(buffer, 0, len);

    in.close();
    out.close();
  }

  public static final void unZipIt(String F1, String F2) {
    Enumeration entries;
    ZipFile zipFile;

    try {
      zipFile = new ZipFile(F1);

      entries = zipFile.entries();

      while(entries.hasMoreElements()) {
        ZipEntry entry = (ZipEntry)entries.nextElement();

        if(entry.isDirectory()) {
          // Assume directories are stored parents first then children.
          System.err.println("Extracting directory: " + entry.getName());
          // This is not robust, just for demonstration purposes.
          (new File(entry.getName())).mkdirs();
          continue;
        }

        System.err.println("Extracting file: " + entry.getName());
        copyInputStream(zipFile.getInputStream(entry),
           new BufferedOutputStream(new FileOutputStream(entry.getName())));
      }

      zipFile.close();
    } catch (IOException ioe) {
      System.err.println("Unhandled exception:");
      ioe.printStackTrace();
      return;
    }
  }

   }

然而,解压缩后应用程序不会启动..有什么想法吗?

4

1 回答 1

1

您的可执行文件很可能未标记为可执行文件。诀窍是.app“文件”实际上是目录,因此使它们可执行没有实际用途,您需要找到实际的二进制文件。

为此,您需要打开./myApp.app/Contents/Info.plit并查找CFBundleExecutable密钥:关联的字符串是可执行文件的路径,相对于./myApp.app/Contents/MacOS,我相信。

找到该文件后,chmod +x检查您的应用程序是否仍然无法启动。

如果没有,问题就解决了。

如果是这样,请尝试通过open ./myApp.app命令从终端打开您的应用程序。如果打印出任何奇怪的东西,请用它更新您的问题并让我们知道那是什么。

如果所有其他方法都失败了,请查看Console应用程序以获取有趣的日志条目 - 您可以搜索应用程序的名称,看看是否有任何内容出现。

于 2013-07-25T21:00:48.753 回答