Re: [WiX-users] verify file existance custom action

2007-03-20 Thread Chris.Rowland
Ok, I finally have access to the machine I need and I'm trying this out.

I tried to build in Visual Studio 03 as a C++ project, and right off the
bat I got some build errors that I don't understand. I'm sure they're
pretty typical, I'm just unfamiliar with VC++.

 

error LNK2001: unresolved external symbol unsigned int __stdcall
MsiSetPropertyA(unsigned long,char const *,char const *)
(?MsiSetPropertyA@@[EMAIL PROTECTED])

error LNK2001: unresolved external symbol int __stdcall
PathFileExistsA(char const *) (?PathFileExistsA@@[EMAIL PROTECTED])

error LNK2001: unresolved external symbol unsigned int __stdcall
MsiGetPropertyA(unsigned long,char const *,char *,unsigned long *)
(?MsiGetPropertyA@@[EMAIL PROTECTED])

 

 

I'd guess it must be something with my setup, because I get the same
errors about the Set and Get methods when I use the tiny CheckPID
example from http://www.tramontana.co.hu/wix/lesson3.php#3.3

 

I know not really a WiX issue, but I'd appreciate any advise you had.



From: Levi Wilson [mailto:[EMAIL PROTECTED] 
Sent: Friday, March 16, 2007 8:56 AM
To: Rowland, Chris
Cc: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] verify file existance custom action

 

Sorry, prematurely sent it.  Here is what I was getting at:

extern C UINT __stdcall LocateFile(MSIHANDLE hInstall)
{
  char* pDirPath = NULL;
  DWORD dw = 0;
  if( ERROR_MORE_DATA!=MsiGetProperty(hInstall,MYFOLDER,NULL,dw) ) 
return ERROR_INSTALL_FAILURE;

  dw += strlen(requiredfile.txt) + 1 /* term. NULL */;
  pDirPath = new char[dw];
  pDirPath[0] = '\0';
   
  if( ERROR_SUCCESS!=MsiGetProperty(hInstall,MYFOLDER,pDirPath,dw) )
{ 
delete[] pDirPath;
return ERROR_INSTALL_FAILURE;
  }

  _ASSERTE( 0!=strlen(pDirPath) );

  if( PathFileExists(pDirPath) ) {
MsiSetProperty(hInstall,MYFILEEXISTS,pDirPath);  // Dr. Evil
assumption 
  }

  delete[] pDirPath;
  return ERROR_SUCCESS;
}

I believe that something like this would work.



On 3/16/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

If I look at the log after a completed installation, I can see the
following property values.

 

Property(S): MYFOLDER = C:\FTP\#This is the folder I
selected in the dialog

...

Property(S): MYFILEEXISTS = C:\requiredfile.txt  #this is
where the file was found (MYFOLDER was initialized to 'c:\')

 

So MYFOLDER did get set, but it seems to happen after the directory
search took place.  Would it be possible to have AppSearch happen
sometime in the UI sequence, or would that break something else?  It
looks like by default It happens very early on.

 

 



From: Levi Wilson [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 15, 2007 4:36 PM


To: Rowland, Chris
Cc: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] verify file existance custom action

 

Hmmm, I've never used a directory search like that.  So you're saying
that your MYFOLDER property isn't getting set when the directory search
is performed?  I think you probably will need to maybe use a custom
action then since I don't think you can dynamically manipulate a
directory search, or tell it when to perform it as I think file searches
get executed during the AppSearch sequence?  I could be wrong, but I
don't think you can use the FileSearch like this. 

On 3/15/07, [EMAIL PROTECTED]  [EMAIL PROTECTED]
mailto:[EMAIL PROTECTED]  wrote:

That actually looks like exactly what I want... much cleaner than my C++
hackjob.

 

 

That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to
directory doesn't contain the browsed-to directory when the
DirectorySearch is performed.

 

  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202
Width=261 Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS 

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch
Name=requiredfile.txt /

/DirectorySearch 

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control

 

 

I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c:\ (I can see
MYFILEEXISTS=c:\requiredfile.txt in the log)

It doesn't work if I browse to the directory that contains the file (and
of course I remove the file from c:\ )

 

Thanks for the help so far, this feels like a much better way than what
I was previously attempting

Re: [WiX-users] verify file existance custom action

2007-03-20 Thread Levi Wilson

No, you'll need to link in with the msi.lib.  At the beginning of your cpp
file, add the following:


#pragma comment(lib,msi.lib)
#pragma comment(lib,shlwapi.lib)

That should work.  Those functions that it is trying to call need to be
linked in from the libraries that house them.


On 3/20/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


 Ok, I finally have access to the machine I need and I'm trying this out.

I tried to build in Visual Studio 03 as a C++ project, and right off the
bat I got some build errors that I don't understand. I'm sure they're pretty
typical, I'm just unfamiliar with VC++.



error LNK2001: unresolved external symbol unsigned int __stdcall
MsiSetPropertyA(unsigned long,char const *,char const *)
(?MsiSetPropertyA@@[EMAIL PROTECTED])

error LNK2001: unresolved external symbol int __stdcall
PathFileExistsA(char const *) (?PathFileExistsA@@[EMAIL PROTECTED])

error LNK2001: unresolved external symbol unsigned int __stdcall
MsiGetPropertyA(unsigned long,char const *,char *,unsigned long *)
(?MsiGetPropertyA@@[EMAIL PROTECTED])





I'd guess it must be something with my setup, because I get the same
errors about the Set and Get methods when I use the tiny CheckPID example
from http://www.tramontana.co.hu/wix/lesson3.php#3.3



I know not really a WiX issue, but I'd appreciate any advise you had.
 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Friday, March 16, 2007 8:56 AM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Sorry, prematurely sent it.  Here is what I was getting at:

extern C UINT __stdcall LocateFile(MSIHANDLE hInstall)
{
  char* pDirPath = NULL;
  DWORD dw = 0;
  if( ERROR_MORE_DATA!=MsiGetProperty(hInstall,MYFOLDER,NULL,dw) )
return ERROR_INSTALL_FAILURE;

  dw += strlen(requiredfile.txt) + 1 /* term. NULL */;
  pDirPath = new char[dw];
  pDirPath[0] = '\0';

  if( ERROR_SUCCESS!=MsiGetProperty(hInstall,MYFOLDER,pDirPath,dw) ) {
delete[] pDirPath;
return ERROR_INSTALL_FAILURE;
  }

  _ASSERTE( 0!=strlen(pDirPath) );

  if( PathFileExists(pDirPath) ) {
MsiSetProperty(hInstall,MYFILEEXISTS,pDirPath);  // Dr. Evil
assumption
  }

  delete[] pDirPath;
  return ERROR_SUCCESS;
}

I believe that something like this would work.

 On 3/16/07, [EMAIL PROTECTED] [EMAIL PROTECTED]
wrote:

If I look at the log after a completed installation, I can see the
following property values.



Property(S): MYFOLDER = C:\FTP\#This is the folder I selected
in the dialog

…

Property(S): MYFILEEXISTS = C:\requiredfile.txt  #this is
where the file was found (MYFOLDER was initialized to 'c:\')



So MYFOLDER did get set, but it seems to happen after the directory search
took place.  Would it be possible to have AppSearch happen sometime in the
UI sequence, or would that break something else?  It looks like by default
It happens very early on.




 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 4:36 PM


*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Hmmm, I've never used a directory search like that.  So you're saying that
your MYFOLDER property isn't getting set when the directory search is
performed?  I think you probably *will* need to maybe use a custom action
then since I don't think you can dynamically manipulate a directory search,
or tell it when to perform it as I think file searches get executed during
the AppSearch sequence?  I could be wrong, but I don't think you can use the
FileSearch like this.

On 3/15/07, [EMAIL PROTECTED]  [EMAIL PROTECTED]
wrote:

That actually looks like exactly what I want… much cleaner than my C++
hackjob.





That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to directory
doesn't contain the browsed-to directory when the DirectorySearch is
performed.



  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202 Width=261
Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch Name=
requiredfile.txt /

/DirectorySearch

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control





I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c

Re: [WiX-users] verify file existance custom action

2007-03-16 Thread Levi Wilson

Yeah, that's what I was trying to say.  I believe this happens in the
AppSearch sequence.  You probably will need to use a CA for this to happen.
I can try to help you with this as well, but it might look something like
the following:

extern C UINT __stdcall LocateFile(MSIHANDLE hInstall)
{
 char* pDirPath = NULL;

}


On 3/16/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


 If I look at the log after a completed installation, I can see the
following property values.



Property(S): MYFOLDER = C:\FTP\#This is the folder I selected
in the dialog

…

Property(S): MYFILEEXISTS = C:\requiredfile.txt  #this is
where the file was found (MYFOLDER was initialized to 'c:\')



So MYFOLDER did get set, but it seems to happen after the directory search
took place.  Would it be possible to have AppSearch happen sometime in the
UI sequence, or would that break something else?  It looks like by default
It happens very early on.




 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 4:36 PM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Hmmm, I've never used a directory search like that.  So you're saying that
your MYFOLDER property isn't getting set when the directory search is
performed?  I think you probably *will* need to maybe use a custom action
then since I don't think you can dynamically manipulate a directory search,
or tell it when to perform it as I think file searches get executed during
the AppSearch sequence?  I could be wrong, but I don't think you can use the
FileSearch like this.

On 3/15/07, [EMAIL PROTECTED]  [EMAIL PROTECTED]
wrote:

That actually looks like exactly what I want… much cleaner than my C++
hackjob.





That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to directory
doesn't contain the browsed-to directory when the DirectorySearch is
performed.



  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202 Width=261
Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch Name=
requiredfile.txt /

/DirectorySearch

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control





I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c:\ (I can see
MYFILEEXISTS=c:\requiredfile.txt in the log)

It doesn't work if I browse to the directory that contains the file (and
of course I remove the file from c:\ )



Thanks for the help so far, this feels like a much better way than what I
was previously attempting.
 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 3:50 PM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Can you post your CA C++ code?  Also, you don't need to have a DLL custom
action to check for the existence of a file.  You can do something like this
in your WiX source:

Property Id=MyFileExists
  DirectorySearch Id=MyDirSearch Path=some path here Depth=1
FileSearch Id=MyFileSearch Name=myfile.extension /
  /DirectorySearch
/Property


If the file has been found, then the MyFileExists property will be set to
the full path of your file.  Is this what you're looking for?

On 3/15/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using managed code.  Most examples I find seem to use it,
however, so I'm doing the best I can.



I wrote a simple VC++ app (.exe) that will determine if some files exist.
I probably did it badly, but it worked in that context.

I took the same code, and cut paste into a VC++ file I had setup to
create my dll.

The code was previously a working snippet that would simply set a msi
property to true and return ERROR_SUCCESS.

I am now trying to make it do something useful.



After the cut paste I got some build errors and followed (somewhat) the
steps listed here to resolve them. http://support.microsoft.com/?kbid=814472


The dll built successfully, but when I run the installer I get error 2896,
Executing action [2] failed.  That doesn't tell me too much.



I stepped backwards until

Re: [WiX-users] verify file existance custom action

2007-03-16 Thread Levi Wilson

Sorry, prematurely sent it.  Here is what I was getting at:

extern C UINT __stdcall LocateFile(MSIHANDLE hInstall)
{
 char* pDirPath = NULL;
 DWORD dw = 0;
 if( ERROR_MORE_DATA!=MsiGetProperty(hInstall,MYFOLDER,NULL,dw) )
   return ERROR_INSTALL_FAILURE;

 dw += strlen(requiredfile.txt) + 1 /* term. NULL */;
 pDirPath = new char[dw];
 pDirPath[0] = '\0';

 if( ERROR_SUCCESS!=MsiGetProperty(hInstall,MYFOLDER,pDirPath,dw) ) {
   delete[] pDirPath;
   return ERROR_INSTALL_FAILURE;
 }

 _ASSERTE( 0!=strlen(pDirPath) );

 if( PathFileExists(pDirPath) ) {
   MsiSetProperty(hInstall,MYFILEEXISTS,pDirPath);  // Dr. Evil
assumption
 }

 delete[] pDirPath;
 return ERROR_SUCCESS;
}

I believe that something like this would work.


On 3/16/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


 If I look at the log after a completed installation, I can see the
following property values.



Property(S): MYFOLDER = C:\FTP\#This is the folder I selected
in the dialog

…

Property(S): MYFILEEXISTS = C:\requiredfile.txt  #this is
where the file was found (MYFOLDER was initialized to 'c:\')



So MYFOLDER did get set, but it seems to happen after the directory search
took place.  Would it be possible to have AppSearch happen sometime in the
UI sequence, or would that break something else?  It looks like by default
It happens very early on.




 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 4:36 PM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Hmmm, I've never used a directory search like that.  So you're saying that
your MYFOLDER property isn't getting set when the directory search is
performed?  I think you probably *will* need to maybe use a custom action
then since I don't think you can dynamically manipulate a directory search,
or tell it when to perform it as I think file searches get executed during
the AppSearch sequence?  I could be wrong, but I don't think you can use the
FileSearch like this.

On 3/15/07, [EMAIL PROTECTED]  [EMAIL PROTECTED]
wrote:

That actually looks like exactly what I want… much cleaner than my C++
hackjob.





That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to directory
doesn't contain the browsed-to directory when the DirectorySearch is
performed.



  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202 Width=261
Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch Name=
requiredfile.txt /

/DirectorySearch

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control





I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c:\ (I can see
MYFILEEXISTS=c:\requiredfile.txt in the log)

It doesn't work if I browse to the directory that contains the file (and
of course I remove the file from c:\ )



Thanks for the help so far, this feels like a much better way than what I
was previously attempting.
 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 3:50 PM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Can you post your CA C++ code?  Also, you don't need to have a DLL custom
action to check for the existence of a file.  You can do something like this
in your WiX source:

Property Id=MyFileExists
  DirectorySearch Id=MyDirSearch Path=some path here Depth=1
FileSearch Id=MyFileSearch Name=myfile.extension /
  /DirectorySearch
/Property


If the file has been found, then the MyFileExists property will be set to
the full path of your file.  Is this what you're looking for?

On 3/15/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using managed code.  Most examples I find seem to use it,
however, so I'm doing the best I can.



I wrote a simple VC++ app (.exe) that will determine if some files exist.
I probably did it badly, but it worked in that context.

I took the same code, and cut paste into a VC++ file I had setup to
create my dll.

The code was previously a working snippet that would simply set a msi

Re: [WiX-users] verify file existance custom action

2007-03-16 Thread Chris.Rowland
Thanks Levi, I'll give that a shot as soon as I get access to my
development box back.

 



From: Levi Wilson [mailto:[EMAIL PROTECTED] 
Sent: Friday, March 16, 2007 8:56 AM
To: Rowland, Chris
Cc: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] verify file existance custom action

 

Sorry, prematurely sent it.  Here is what I was getting at:

extern C UINT __stdcall LocateFile(MSIHANDLE hInstall)
{
  char* pDirPath = NULL;
  DWORD dw = 0;
  if( ERROR_MORE_DATA!=MsiGetProperty(hInstall,MYFOLDER,NULL,dw) ) 
return ERROR_INSTALL_FAILURE;

  dw += strlen(requiredfile.txt) + 1 /* term. NULL */;
  pDirPath = new char[dw];
  pDirPath[0] = '\0';
   
  if( ERROR_SUCCESS!=MsiGetProperty(hInstall,MYFOLDER,pDirPath,dw) )
{ 
delete[] pDirPath;
return ERROR_INSTALL_FAILURE;
  }

  _ASSERTE( 0!=strlen(pDirPath) );

  if( PathFileExists(pDirPath) ) {
MsiSetProperty(hInstall,MYFILEEXISTS,pDirPath);  // Dr. Evil
assumption 
  }

  delete[] pDirPath;
  return ERROR_SUCCESS;
}

I believe that something like this would work.



On 3/16/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

If I look at the log after a completed installation, I can see the
following property values.

 

Property(S): MYFOLDER = C:\FTP\#This is the folder I
selected in the dialog

...

Property(S): MYFILEEXISTS = C:\requiredfile.txt  #this is
where the file was found (MYFOLDER was initialized to 'c:\')

 

So MYFOLDER did get set, but it seems to happen after the directory
search took place.  Would it be possible to have AppSearch happen
sometime in the UI sequence, or would that break something else?  It
looks like by default It happens very early on.

 

 



From: Levi Wilson [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 15, 2007 4:36 PM


To: Rowland, Chris
Cc: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] verify file existance custom action

 

Hmmm, I've never used a directory search like that.  So you're saying
that your MYFOLDER property isn't getting set when the directory search
is performed?  I think you probably will need to maybe use a custom
action then since I don't think you can dynamically manipulate a
directory search, or tell it when to perform it as I think file searches
get executed during the AppSearch sequence?  I could be wrong, but I
don't think you can use the FileSearch like this. 

On 3/15/07, [EMAIL PROTECTED]  [EMAIL PROTECTED]
mailto:[EMAIL PROTECTED]  wrote:

That actually looks like exactly what I want... much cleaner than my C++
hackjob.

 

 

That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to
directory doesn't contain the browsed-to directory when the
DirectorySearch is performed.

 

  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202
Width=261 Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS 

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch
Name=requiredfile.txt /

/DirectorySearch 

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control

 

 

I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c:\ (I can see
MYFILEEXISTS=c:\requiredfile.txt in the log)

It doesn't work if I browse to the directory that contains the file (and
of course I remove the file from c:\ )

 

Thanks for the help so far, this feels like a much better way than what
I was previously attempting.



From: Levi Wilson [mailto: [EMAIL PROTECTED] 
Sent: Thursday, March 15, 2007 3:50 PM
To: Rowland, Chris
Cc: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] verify file existance custom action

 

Can you post your CA C++ code?  Also, you don't need to have a DLL
custom action to check for the existence of a file.  You can do
something like this in your WiX source:

Property Id=MyFileExists 
  DirectorySearch Id=MyDirSearch Path=some path here Depth=1
FileSearch Id=MyFileSearch Name=myfile.extension /
  /DirectorySearch 
/Property


If the file has been found, then the MyFileExists property will be set
to the full path of your file.  Is this what you're looking for?

On 3/15/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using

[WiX-users] verify file existance custom action

2007-03-15 Thread Chris.Rowland
I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using managed code.  Most examples I find seem to use it,
however, so I'm doing the best I can.

 

I wrote a simple VC++ app (.exe) that will determine if some files
exist.  I probably did it badly, but it worked in that context. 

I took the same code, and cut paste into a VC++ file I had setup to
create my dll.

The code was previously a working snippet that would simply set a msi
property to true and return ERROR_SUCCESS.

I am now trying to make it do something useful.

 

After the cut paste I got some build errors and followed (somewhat) the
steps listed here to resolve them.
http://support.microsoft.com/?kbid=814472

The dll built successfully, but when I run the installer I get error
2896, Executing action [2] failed.  That doesn't tell me too much.

 

I stepped backwards until I had one line that I could comment/uncomment
to make the dll work(return true)/not work(error 2896)

 

The one line that causes it to fail (and concequently causes the dll to
double in size) is:

 

ifstream fin1(filename);

 

Down the road I was doing 'if (fin1.good())' to see if the file exists
(like I said, probably a bad way, but it was the first thing I did that
seemed to work)

 

Is attempting to do this fundamentally wrong?

Also, I'm running the installer with /l* but I'm still not getting
anything particularly helpful.  Are there better techniques for
debugging?

 

 

-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


Re: [WiX-users] verify file existance custom action

2007-03-15 Thread Levi Wilson

Can you post your CA C++ code?  Also, you don't need to have a DLL custom
action to check for the existence of a file.  You can do something like this
in your WiX source:

Property Id=MyFileExists
 DirectorySearch Id=MyDirSearch Path=some path here Depth=1
   FileSearch Id=MyFileSearch Name=myfile.extension /
 /DirectorySearch
/Property


If the file has been found, then the MyFileExists property will be set to
the full path of your file.  Is this what you're looking for?

On 3/15/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


 I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using managed code.  Most examples I find seem to use it,
however, so I'm doing the best I can.



I wrote a simple VC++ app (.exe) that will determine if some files exist.
I probably did it badly, but it worked in that context.

I took the same code, and cut paste into a VC++ file I had setup to
create my dll.

The code was previously a working snippet that would simply set a msi
property to true and return ERROR_SUCCESS.

I am now trying to make it do something useful.



After the cut paste I got some build errors and followed (somewhat) the
steps listed here to resolve them.
http://support.microsoft.com/?kbid=814472

The dll built successfully, but when I run the installer I get error 2896,
Executing action [2] failed.  That doesn't tell me too much.



I stepped backwards until I had one line that I could comment/uncomment to
make the dll work(return true)/not work(error 2896)



The one line that causes it to fail (and concequently causes the dll to
double in size) is:



ifstream fin1(filename);



Down the road I was doing 'if (fin1.good())' to see if the file exists
(like I said, probably a bad way, but it was the first thing I did that
seemed to work)



Is attempting to do this fundamentally wrong?

Also, I'm running the installer with /l* but I'm still not getting
anything particularly helpful.  Are there better techniques for debugging?





-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT  business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


Re: [WiX-users] verify file existance custom action

2007-03-15 Thread Levi Wilson

Hmmm, I've never used a directory search like that.  So you're saying that
your MYFOLDER property isn't getting set when the directory search is
performed?  I think you probably will need to maybe use a custom action then
since I don't think you can dynamically manipulate a directory search, or
tell it when to perform it as I think file searches get executed during the
AppSearch sequence?  I could be wrong, but I don't think you can use the
FileSearch like this.

On 3/15/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


 That actually looks like exactly what I want… much cleaner than my C++
hackjob.





That gives me a followup question, however.  I plugged your suggestion
(with Depth=0) into my dialog I use to browse to the directory that
contains the file.

It appears that the property I'm trying to set to the browsed-to directory
doesn't contain the browsed-to directory when the DirectorySearch is
performed.



  Dialog Id=GetExistingFilesDlg Width=370 Height=270
Title=[ProductName] [Setup] NoMinimize=yes

Control Id=PathEdit Type=PathEdit X=84 Y=202 Width=261
Height=18 Property=MYFOLDER/

Control Id=Next Type=PushButton X=236 Y=243 Width=56
Height=17 Default=yes Text=Next

  Property Id=MYFILEEXISTS

DirectorySearch Id=MyDirSearch
Path=[MYFOLDER] Depth=0

FileSearch Id=MyFileSearch Name=
requiredfile.txt /

/DirectorySearch

  /Property

  Publish Event=SpawnDialog Value=InvalidDirDlgNOT
MYFILEEXISTS/Publish

  Publish Event=NewDialog
Value=SetupTypeDlgMYFILEEXISTS/Publish

/Control





I initialized MYFOLDER with Property Id='MYFOLDER' Value='c:\' /

This works if requiredfile.txt is in c:\ (I can see
MYFILEEXISTS=c:\requiredfile.txt in the log)

It doesn't work if I browse to the directory that contains the file (and
of course I remove the file from c:\ )



Thanks for the help so far, this feels like a much better way than what I
was previously attempting.
 --

*From:* Levi Wilson [mailto:[EMAIL PROTECTED]
*Sent:* Thursday, March 15, 2007 3:50 PM
*To:* Rowland, Chris
*Cc:* wix-users@lists.sourceforge.net
*Subject:* Re: [WiX-users] verify file existance custom action



Can you post your CA C++ code?  Also, you don't need to have a DLL custom
action to check for the existence of a file.  You can do something like this
in your WiX source:

Property Id=MyFileExists
  DirectorySearch Id=MyDirSearch Path=some path here Depth=1
FileSearch Id=MyFileSearch Name=myfile.extension /
  /DirectorySearch
/Property


If the file has been found, then the MyFileExists property will be set to
the full path of your file.  Is this what you're looking for?

On 3/15/07, * [EMAIL PROTECTED] [EMAIL PROTECTED]
wrote:

I read that managed code in a custom action is a no-no (please forgive
me if I use the wrong terminology) so I am attempting to write my custom
action without using managed code.  Most examples I find seem to use it,
however, so I'm doing the best I can.



I wrote a simple VC++ app (.exe) that will determine if some files exist.
I probably did it badly, but it worked in that context.

I took the same code, and cut paste into a VC++ file I had setup to
create my dll.

The code was previously a working snippet that would simply set a msi
property to true and return ERROR_SUCCESS.

I am now trying to make it do something useful.



After the cut paste I got some build errors and followed (somewhat) the
steps listed here to resolve them. http://support.microsoft.com/?kbid=814472


The dll built successfully, but when I run the installer I get error 2896,
Executing action [2] failed.  That doesn't tell me too much.



I stepped backwards until I had one line that I could comment/uncomment to
make the dll work(return true)/not work(error 2896)



The one line that causes it to fail (and concequently causes the dll to
double in size) is:



ifstream fin1(filename);



Down the road I was doing 'if (fin1.good())' to see if the file exists
(like I said, probably a bad way, but it was the first thing I did that
seemed to work)



Is attempting to do this fundamentally wrong?

Also, I'm running the installer with /l* but I'm still not getting
anything particularly helpful.  Are there better techniques for debugging?






-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT  business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users



-
Take Surveys. Earn Cash. Influence