2010-11-22 59 views
1

我会尽量让自己变得尽可能清楚。访问数据的NSIS问题

我用NSIS制作了一个安装程序。桌面上创建了一个图标,当我双击该图标时,应用程序就会启动。 但是,在安装目录中我有其他目录(如“css”,其中包含“style.css”),似乎该程序正在快捷方式( - >桌面)的目录中查找我的css文件。

我该如何让程序在安装目录中而不是在桌面上?

感谢您的回答。


这里是我使用的代码:

Section "Shortcuts" 
SectionIn 2 
SetOutPath "$SMPROGRAMS\MyApp" 
CreateShortCut "$SMPROGRAMS\MyApp\MyApp.lnk" "$INSTDIR\MyApp.exe" 
SetOutPath "$INSTDIR" 
CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" 
SectionEnd 

如果我更改为 “$ INSTDIR”,该快捷方式不是在所有创建(3号线)outpath中。如果我使用此代码,则创建快捷方式,但“开始”参数设置为桌面。

回答

2

在这种情况下的问题是,您的应用程序正在使用相对路径而没有限定它们;简单的解决办法是让快捷方式指定工作目录:(这似乎奇怪的是,SetOutPath改变CreateShortCut,但手册上说它)

SetOutPath "$INSTDIR" 
CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" # etc. 

正确的解决方案是让所有路径绝对的;你已经标记为qt,所以我认为你正在使用Qt和C++。搜索“qt绝对路径”和类似的东西 - 例如Qt-interest Archive - How to get an application's absolute path?

+0

谢谢,我发现这个解决方案太多,但现在出现了另外一个问题: CreateShortCut “$ SMPROGRAMS \ MyApp的\ MyApp.lnk” “$ INSTDIR \ MyApp.exe将” 建立在程序列表中的快捷方式,但我有和以前相同的问题,除了这次SetOutPath“$ INSTDIR” 不会改变任何东西......任何想法? – Yoot 2010-11-22 12:36:45

+0

现在的另一个问题?什么问题?如果之后的事情发生在错误的地方,请再次使用“SetOutPath”返回到原来的位置。 – 2010-11-22 12:38:11

+0

对不起,我按了“输入”太快,我没有完成该职位;) – Yoot 2010-11-22 12:40:44

0
Section "Shortcuts" 
SectionIn 2 
CreateDirectory "$SMPROGRAMS\MyApp" #CreateShortCut does not create directories 
SetOutPath "INSTDIR" 
CreateShortCut "$SMPROGRAMS\MyApp\MyApp.lnk" "$INSTDIR\MyApp.exe" 
SetOutPath "$INSTDIR" 
CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" 
SectionEnd