繁体   English   中英

使用 nsis 打包应用程序安装程序和 .wav 文件无法播放,因为 Windows 上的路径包含空格 --> Program%20Files

[英]Using nsis to package application installer and .wav file does not play because of a path on Windows containing a space --> Program%20Files

我遇到了一个涉及用于 Windows 安装的音频输入流、资源文件夹和 nsis 的问题。 我正在开发一个应用程序(在 Linux 中),该应用程序在事件发生时执行桌面通知,并且除了应该在通知弹出时播放的 .wav 文件之外,一切正常。 我已经在 64 位 Windows 机器上测试了该应用程序,而没有通过 nsis 安装它,它运行良好。 我收到一条错误消息,指出:

2013 年 7 月 8 日 12:17:26 错误 [Thread-2] (DesktopNotifierMessageAlertHandler.java:73) com.alcatel.proserv.e911.desktopNotifierMessaging.desktopNotifierMessageHandler.DesktopNotifierMessageAlertHandler - 错误:java.io.FileNotFoundException: C:\\Program% 20Files\\Alcatel-Lucent\\E911DesktopNotifier\\classes\\audio\\siren.wav(Le chemin d'accès spécifié est introuvable)

我在 Netbeans 工作并使用 maven 进行构建。 这是我如何加载路径的代码片段:

    String filename = this.getClass().getResource("/audio/siren.wav").getPath();
    AudioInputStream audioInputStream = null;
    try{
    audioInputStream = AudioSystem.getAudioInputStream(new File(filename).getAbsoluteFile());
    Clip clip = null;           
clip = AudioSystem.getClip();       
clip.open(audioInputStream);        
    clip.start();
    }
    ...

我发现这个博客详细介绍了如何解决一个非常相似的问题: http ://braintwitter.blogspot.ro/2013/03/url-encoding-issue-with-tomcat.html

但它没有与我正在使用的 audioInputStream 一起工作。

我知道“程序文件”中的空间存在问题,这是我必须设置安装的地方,因为当我将 setup.nsi 脚本中的 InstallDir 值从 $PROGRAMFILES64 更改为 $WINDIR 时,它运行良好。

由于 Program Files 中的空间导致编码问题,是否有人对如何修改我的代码以使其正常工作有任何建议?

getResource()返回URL ,并且在此处应用了URL编码。 您有两个选择。 您可以转换为URI

String filename = this.getClass().getResource("/audio/siren.wav").toURI().getPath();

或者,您可以使用URLDecoder对路径进行解码,然后再将其传递给AudioInputStream

String filename = this.getClass().getResource("/audio/siren.wav").getPath();
filename = URLDecoder.decode(filename, "utf-8");

有关java.net.URL请参见简介部分末尾的内容简介。

所以我知道这是一个相当老的线程,但是任何阅读此内容的人,请三思而后行,因为 nsis 打包程序会在运行恶意软件字节、avira、roguekiller、hitman pro 和 stinger 的 PC 上对病毒总数进行扫描时创建此恶意软件。

Antiy-AVL - Trojan/Generic.ASMalwS.3506C16, Avast-Win64:Malware-gen, AVG - Win64:Malware-gen, Cyren - W64/Tedy.B.gen!Eldorado, 江民-Trojan.PSW.Python.fv, Zillya -Trojan.Disco.Script.653

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM