Old 30th March 2010, 18:32   #81
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
How about this:
code:
AddCustom [/icon path] application process callback

Usage:
code:
GetFunctionAddress $R0 IsMyAppRunning
LockedList::AddCustom /icon $PLUGINSDIR\icon.ico "My App" "myapp.exe" $R0

code:
Function IsMyAppRunning
Pop $R0 ; $R0 = myapp.exe in case you want to know
${If} [myapp is locking files]
Push true
${Else}
Push false
${EndIf}
FunctionEnd

Stu
Afrow UK is offline   Reply With Quote
Old 30th March 2010, 18:40   #82
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Yeah, seems like that would work (and be more flexible for general use). How often would the callback be called? Unless it blocks the thread, etc.
Animaether is offline   Reply With Quote
Old 31st March 2010, 19:02   #83
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Uploaded v1.1. The callback is called initially before adding the custom item and then again every second after searching has completed.

Edit: And FYI Why do win32 calls GetModuleFileNameEx, EnumProcessModules, EnumProcessModulesEx fail in Wow64?
Edit 2: LockedList uses GetProcessImageFileName if it exists so LockedList will work for all executables (32-bit or 64-bit) but cannot work for 64-bit modules. One idea (which Process Explorer uses) is to run a secondary 64-bit process which relays information back to the 32-bit process (in this case, the plug-in) but this would be a lot of work.

Stu
Afrow UK is offline   Reply With Quote
Old 31st March 2010, 20:37   #84
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Just tried, but the "LockedListCustom.nsi" example goes straight through without invoking the callback function, it seems. I'm using the regular DLL, MD5: 0dd1e0aee3b2aba0483c5d50c4656ba6

Re Edit: yeah, I found similar information a bit after I asked the initial question.. almost makes sense if not for it being something MSFT -could- have addressed if they really wanted to; alas

Re Edit 2: Right - I wouldn't delve into that right away
Animaether is offline   Reply With Quote
Old 31st March 2010, 21:03   #85
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Thanks, fixed. Reminder for future I must always test release DLL's as well as debug DLL's

Stu
Afrow UK is offline   Reply With Quote
Old 31st March 2010, 21:16   #86
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Excellent - That is actually a pretty elegant solution to an entirely non-elegant problem.. makes LockedList extremely flexible as a sweet side-effect

One question if I may; the Custom example (which is still titled 'Using AddModule and notepad.exe' - btw) seems to use $R0 - the callback function address - 3 times. The docs only specify it once. I commented out the 2nd and 3rd and the example still runs so I suppose they're at least not required - but now I'm curious as to why they're there

*goes to hit the actual installer code to try and hook his simplified locked file check into this*
Animaether is offline   Reply With Quote
Old 31st March 2010, 22:03   #87
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Sweet - as far as I can tell, this will work beautifully.. still have to test it in the wild, but several quick simple tests haven't revealed any particular problems.

So now I have...

${LockCheck} : a simple locked files checker macro bit that only reports -if- a file is locked (if it exists, and if we care (version number check)), not -what- is locking it..

1. that I feed target/source files into with a single line call for each module
2. if it is determined none of the files are locked (based on the output of the macro), skip the LockedList dialog, otherwise...
3. initialize the LockedList dialog with those Module (32bit) or Custom (64bit) items that were determined to be locked, which will report the locking applications (32bit) and my Custom items (64bit)
4. which will automagically check everything except for the Custom items for which it calls...
5. a callback which invokes the simple locked files checking macro ${LockCheck} and...
6. tells lockedlist whether or not the file is unlocked based on its output again.

It's not perfect, but it's much better than going *BOINK* at a user mid-file installation with a can't-overwrite-this-file dialog
Animaether is offline   Reply With Quote
Old 2nd April 2010, 01:36   #88
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
I just realized that when the dialog closes, the stack value for the next button is always "next" - which means you can't discern from it whether the user clicked the next (all apps were closed / there was nothing to close to begin with) or the 'ignore' button.

These are one and the same button just with custom captions on them, of course - which also leads to the work-around: grab the text off of the button and compare it to the '/ignore text' flag value you defined. Just thought it might be good if the plugin handled this in the value it pushes to the stack
Animaether is offline   Reply With Quote
Old 2nd April 2010, 14:17   #89
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Done. Also added an IsFileLocked utility function. See the changelog for full details.

Stu
Afrow UK is offline   Reply With Quote
Old 2nd April 2010, 18:17   #90
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Sweet - seems you're on a roll
If IsFileLocked works well, I can replace the internal (FileOpen "path" "a") test.

At the moment, though, the Pop'ed value seems to be the passed "path" parameter?
( I popped a few more time to different vars, they all seem to be null )
Animaether is offline   Reply With Quote
Old 3rd April 2010, 11:06   #91
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
That's a bug if it's the first plug-in call (was not initializing global variables such as the stack pointer). If you use it in the callback then it should be fine. Will fix for next version. Someone is reporting a crash but on a window which updates its caption every 100ms (not surprised).

Stu
Afrow UK is offline   Reply With Quote
Old 3rd April 2010, 11:43   #92
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Quote:
Originally Posted by Afrow UK View Post
Someone is reporting a crash but on a window which updates its caption every 100ms (not surprised).
Yikes...
yikes #1: why would that crash?
yikes #2: why on Earth would an application update its caption 10 times per second??
( not necessarily in that order )

I've got one that updates its caption every second.. I stick the time in it (taskbar is set to auto-hide, might as well make use of the titlebar screen real estate) ..but 10 times per second? huh.
Animaether is offline   Reply With Quote
Old 3rd April 2010, 12:32   #93
Pawel
Moderator
 
Pawel's Avatar
 
Join Date: Aug 2004
Location: Poland
Posts: 499
Send a message via ICQ to Pawel
This is my application. It change title of other appliaction, to show some useful information. It doeasnt have to be 100ms but now it is. In final build it will be probably 500ms (it can't be >1s)
I use Stu's plugin in my installer and it crash when it is trying to kill that application with our title (but only unicode build, ansi build works ok...)
And i think , it is because, in some way Process name in application list is displayed as data from title bar I change every x ms...
I hope Stu will find way to fix it.
-Pawel
Pawel is offline   Reply With Quote
Old 3rd April 2010, 16:42   #94
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
hmmm.. as far as I can tell, it only grabs the title once.. must be affecting something deeper down
Animaether is offline   Reply With Quote
Old 4th April 2010, 12:36   #95
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Turns out it was just a buffer overflow. I am not sure why because dynamically allocating the buffer instead of statically seems to have fixed it. I have also increased the buffer length to 1024 characters and fixed the IsFileLocked bug.

Stu
Afrow UK is offline   Reply With Quote
Old 4th April 2010, 16:44   #96
Pawel
Moderator
 
Pawel's Avatar
 
Join Date: Aug 2004
Location: Poland
Posts: 499
Send a message via ICQ to Pawel
Stu,
Yes, it seems it is finally fixed. I will do more tests later.
-Pawel
Pawel is offline   Reply With Quote
Old 4th April 2010, 17:04   #97
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
confirming the IsFileLocked bugfix. Unfortunately it doesn't recognize the locked DLL as being locked; I guess that might be a distinction similar to why there is an AddFile and an AddModule?

It correctly recognized a text file I opened a file handle to (with another app), so that part works if nothing else
Animaether is offline   Reply With Quote
Old 5th April 2010, 11:39   #98
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Yep it will only work on files that have a handle open on them (DLL's do not when they are locked). And yes using AddFile on DLL will not work.

Stu
Afrow UK is offline   Reply With Quote
Old 5th April 2010, 14:23   #99
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Gotcha - makes sense (in that weird and twisted Microsoft-state-of-mind kind of sense)
Animaether is offline   Reply With Quote
Old 6th April 2010, 22:49   #100
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
one more minor item request...
If the list is empty, could the Next button text revert if /ignore is specified? I just noticed that if I specify the /ignore flag, have a locked file, then unlock that file and the list goes empty stating no further programs need to be closed.. the Next button still reads (the /ignore-supplied string) "Ignore".
Animaether is offline   Reply With Quote
Old 8th April 2010, 15:26   #101
glenncarr
Junior Member
 
Join Date: Feb 2002
Location: Tulsa, OK, US
Posts: 26
Send a message via AIM to glenncarr Send a message via Yahoo to glenncarr
Is the source for this plug-in available? If not, have you considered open-sourcing it?
glenncarr is offline   Reply With Quote
Old 8th April 2010, 15:29   #102
glenncarr
Junior Member
 
Join Date: Feb 2002
Location: Tulsa, OK, US
Posts: 26
Send a message via AIM to glenncarr Send a message via Yahoo to glenncarr
Quote:
Originally Posted by glenncarr View Post
Is the source for this plug-in available? If not, have you considered open-sourcing it?
Sorry, I'm a dolt -- just found it in the package.
glenncarr is offline   Reply With Quote
Old 8th April 2010, 16:32   #103
glenncarr
Junior Member
 
Join Date: Feb 2002
Location: Tulsa, OK, US
Posts: 26
Send a message via AIM to glenncarr Send a message via Yahoo to glenncarr
Quickly compiled and ran a few of the examples on Vista64...
- After the initial Welcome page, no list was displayed on the second page
- Back, Next, and Cancel buttons are active, but nothing happens when clicking them
- Have to force the installer to close (system control menu/buttons don't work)

Any suggestions?
glenncarr is offline   Reply With Quote
Old 8th April 2010, 17:38   #104
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Which example causes this? I am running Windows 7 x64 and have not had any issues.

Stu
Afrow UK is offline   Reply With Quote
Old 8th April 2010, 18:37   #105
glenncarr
Junior Member
 
Join Date: Feb 2002
Location: Tulsa, OK, US
Posts: 26
Send a message via AIM to glenncarr Send a message via Yahoo to glenncarr
Quote:
Originally Posted by Afrow UK View Post
Which example causes this? I am running Windows 7 x64 and have not had any issues.

Stu
All of them.
glenncarr is offline   Reply With Quote
Old 8th April 2010, 19:27   #106
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
I can only assume something such as anti-virus software is blocking it. Does SilentSearch work?

Stu
Afrow UK is offline   Reply With Quote
Old 8th April 2010, 19:45   #107
glenncarr
Junior Member
 
Join Date: Feb 2002
Location: Tulsa, OK, US
Posts: 26
Send a message via AIM to glenncarr Send a message via Yahoo to glenncarr
Compiling and running LockedListTest.nsi with /S crashes with this info:
Quote:
Problem signature:
Problem Event Name: APPCRASH
Application Name: LockedListTest.exe
Application Version: 0.0.0.0
Application Timestamp: 49769baa
Fault Module Name: StackHash_fd00
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 00000138
OS Version: 6.0.6002.2.2.0.256.6
Locale ID: 1033
Additional Information 1: fd00
Additional Information 2: ea6f5fe8924aaa756324d57f87834160
Additional Information 3: fd00
Additional Information 4: ea6f5fe8924aaa756324d57f87834160
How do you typically debug this? I've built it in Visual Studio 2008, and I'm trying to attach to my installer exe instance with no luck, so I'm probably missing something obvious. I'd be glad to help if I can.
glenncarr is offline   Reply With Quote
Old 9th April 2010, 12:47   #108
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Make sure the source code is in NSIS\Contrib\LockedList then set the build configuration to Debug (or Debug Unicode if you're using Unicode NSIS). After rebuilding the NSIS installer you can then attach VS to it.

Glad you have VS!

Stu
Afrow UK is offline   Reply With Quote
Old 13th April 2010, 09:39   #109
Alfaromeo
Member
 
Join Date: Mar 2008
Posts: 73
Still have the dependency issue.
It failed to load the Dialog on a fresh XP PC with the following error in the event viewer.

Resolve partial assembly failed for Microsft.VC90.CRT.Reference error message. The referenced assembly is not installed on your system.

Please let me know
Alfaromeo is offline   Reply With Quote
Old 16th April 2010, 13:55   #110
MrSpock77
Junior Member
 
Join Date: Apr 2010
Posts: 5
Quote:
Originally Posted by Alfaromeo View Post
Still have the dependency issue.
It failed to load the Dialog on a fresh XP PC with the following error in the event viewer.

Resolve partial assembly failed for Microsft.VC90.CRT.Reference error message. The referenced assembly is not installed on your system.

Please let me know
I have the same problem. Our installer does not work in XP with LockedList. Microsoft.VC90.CRT is missing...

Any help is highly appreciated.
MrSpock77 is offline   Reply With Quote
Old 22nd April 2010, 12:09   #111
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
Please try v1.4. The DLL had an XML manifest in it defining Microsoft VC90 CRT as a dependency.

Stu
Afrow UK is offline   Reply With Quote
Old 22nd April 2010, 18:26   #112
ahmett
Junior Member
 
Join Date: Jan 2008
Posts: 7
Tested on fresh XP (no any redistributable package installed!) and it works fine

Thanks
ahmett is offline   Reply With Quote
Old 23rd April 2010, 11:39   #113
MrSpock77
Junior Member
 
Join Date: Apr 2010
Posts: 5
Quote:
Originally Posted by Afrow UK View Post
Please try v1.4. The DLL had an XML manifest in it defining Microsoft VC90 CRT as a dependency.
Thanks! It works!
MrSpock77 is offline   Reply With Quote
Old 26th April 2010, 07:45   #114
Alfaromeo
Member
 
Join Date: Mar 2008
Posts: 73
That rocks...Works as expected. Thanks
A requirement is to make the label control transparent and the list contol a little more small.Sicne I'm using UMUI this covers up all the screen .
Please advise.
Alfaromeo is offline   Reply With Quote
Old 26th April 2010, 08:35   #115
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
You'll need to use SetCtlColors for the transparency and SetWindowPos API for the list (among others). It may be easier to resize the list in the dialog resource in Visual Studio and rebuild.

Stu
Afrow UK is offline   Reply With Quote
Old 26th April 2010, 13:17   #116
Alfaromeo
Member
 
Join Date: Mar 2008
Posts: 73
I know the file which will is likely yo be locked by our application , hence is there an option to target that file alone with a if condition to detect whether that file is locked or not.
Check that and show the dialog if necessary.
Alfaromeo is offline   Reply With Quote
Old 26th April 2010, 18:41   #117
Afrow UK
Moderator
 
Afrow UK's Avatar
 
Join Date: Nov 2002
Location: Surrey, England
Posts: 8,433
You can use the SilentSearch function for that but be warned the process can take a little time for modules (even on super fast machines) and even longer for file handles. Hence why the search occurs while the screen is visible.

If you just want to make the label transparent the control ID is defined in resource.h.
You need to use InitDialog and Show plugin calls and InitDialog pushes the window handle onto the stack (just like InstallOptions).

Stu
Afrow UK is offline   Reply With Quote
Old 26th April 2010, 22:52   #118
maxwell72
Junior Member
 
Join Date: Apr 2010
Posts: 1
/noprograms option for dialog isn't working since v1.2
text always returns to it's default value.
just me?

Osman
maxwell72 is offline   Reply With Quote
Old 26th April 2010, 23:19   #119
Animaether
Major Dude
 
Join Date: Jun 2001
Posts: 1,173
Quote:
Originally Posted by maxwell72 View Post
/noprograms option for dialog isn't working since v1.2
text always returns to it's default value.
I don't use it - but I can confirm the error.

The problem is in the source code; it references PARAM_SEARCHING in the part of the code dealing with the /noprograms flag. Must be a copy/paste-effected regression
Animaether is offline   Reply With Quote
Old 27th April 2010, 10:37   #120
Alfaromeo
Member
 
Join Date: Mar 2008
Posts: 73
Was digging the day to display a message when the file is locked.

This is the flow of UI

Welcome
License Page
Directory
Install FIles
Finish

In the main section I have this code:

LockedList::IsFileLocked "<Path to FIle">

Pop $R0

I do not want toshow the UI of Locked list , just detect the file

Your expertise is needed
Alfaromeo is offline   Reply With Quote
Reply
Go Back   Winamp & SHOUTcast Forums > Developer Center > NSIS Discussion

Tags
handle, plug-in

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump