Hi,
I don't know much about this code but some line below there is:
Stream_WriteLocationInfo( stm, exePath );
In our case exePath is still empty.
Shouldn't we set exePath to the same value as This->sPath ?
Christian
Aric Stewart wrote:
It is possible under windows to create a .Lnk file to an exe file before it exists. Office 2000 does this, Scientific Word does this as do other apps as well.
So a quick fix so that in IPersistFile_Save if the exe file is not found, trust the path we are given and allow creation of the link.
Index: dlls/shell32/shelllink.c
RCS file: /home/wine/wine/dlls/shell32/shelllink.c,v retrieving revision 1.70 diff -u -w -r1.70 shelllink.c --- dlls/shell32/shelllink.c 12 Aug 2004 23:00:53 -0000 1.70 +++ dlls/shell32/shelllink.c 20 Aug 2004 13:27:38 -0000 @@ -683,9 +683,14 @@ /* if there's no PIDL, generate one */ if( ! This->pPidl ) {
/* + * windows can create lnk files to executables
that do not exist yet
* so if the executable does not exist the just trust the
path they
* gave us
*/ if( !*exePath )
return E_FAIL;
This->pPidl = ILCreateFromPathW(This->sPath);
}else This->pPidl = ILCreateFromPathW(exePath);
You are right,
I missed that second usage of exePath. I will rework my patch and resubmit it.
thanks for the sharp eyes.
-aric
Christian Costa wrote:
Hi,
I don't know much about this code but some line below there is:
Stream_WriteLocationInfo( stm, exePath );
In our case exePath is still empty.
Shouldn't we set exePath to the same value as This->sPath ?
Christian
Aric Stewart wrote:
It is possible under windows to create a .Lnk file to an exe file before it exists. Office 2000 does this, Scientific Word does this as do other apps as well.
So a quick fix so that in IPersistFile_Save if the exe file is not found, trust the path we are given and allow creation of the link.
Index: dlls/shell32/shelllink.c
RCS file: /home/wine/wine/dlls/shell32/shelllink.c,v retrieving revision 1.70 diff -u -w -r1.70 shelllink.c --- dlls/shell32/shelllink.c 12 Aug 2004 23:00:53 -0000 1.70 +++ dlls/shell32/shelllink.c 20 Aug 2004 13:27:38 -0000 @@ -683,9 +683,14 @@ /* if there's no PIDL, generate one */ if( ! This->pPidl ) {
/* + * windows can create lnk files to executables
that do not exist yet
* so if the executable does not exist the just trust the
path they
* gave us
*/ if( !*exePath )
return E_FAIL;
This->pPidl = ILCreateFromPathW(This->sPath);
}else This->pPidl = ILCreateFromPathW(exePath);