Application does not start after running setup with postbuild event - visual-studio

I've used the script from this thread: Run exe after msi installation? respectively this site: Mailbag: How can I customize an MSI in the Visual Studio setup/deployment project?
The checkbox on the finished dialog shows up but my application doesn't start after pressing finish. Nothing happens.
I've tried different lines:
sql = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`) VALUES ('VSDCA_Launch', '210', '" + fileId + "', '')";
or
sql = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`) VALUES ('VSDCA_Launch', '226', 'TARGETDIR', 'MyProgram.exe')";
Any ideas or is it possible to debug the script or write a log with further informations to find out what exactly doesn't work? The application need administrator rights. Does this matter?

Formatted: The fact that notepad.exe works probably means that you need a full path (notepad.exe is in the system path and can
hence be invoked without a path, other binaries need full path).
Did you try to do [#filekey] as in [#MyProgram.exe] as
value in the Target field? The reference must match a File table
entry. So look in the first column of the File table to
determine what the file identifier is, and use that in the Target
field.
Check out the documentation for Formatted.
WiX?: By the way, is it an option to migrate to WiX? Not to annoy you, but there are some major problems with Visual Studio
Projects for long term
use. Maybe give it a quick skim.
File Table:
Shortcut Table:
Leaving original answer below:
Quick Test: Maybe first check this: What VSDCA_Launch mean in Custom Action script
Logging: Have you enabled logging to determine what is going on? Please check the Logging section in this answer for a quick "how to".
Dry Run: I suppose you could slipstream notepad.exe in there instead of your own executable to see if it launches OK when admin rights are not required. All you need is a test build and a test run.
Incomplete: I am betting you have forgotten something when post processing the MSI though. My guess is a simple formatting issues such as described by the post linked above.

Related

Visual Studio Post-Rebuild / Post-NoBuild Event?

I'm working on a project where I need a script to execute when someone hits "F5" or "F6", even if the code in the project hasn't changed.
The script is responsible for copying data from a different directory - data that may have changed.
I've noticed that this works properly as a post-build event, but only if the project is actually rebuilt. How do I get the event to trigger without requiring a clean each time?
These are the steps I followed to setup the script to run when I needed it:
Opened Project > Properties
Navigate to Custom Build Step > General
Put the script command in the "Command Line" field
Set an arbitrary output filename (this is required, if you don't have an output filename, visual studio will skip your custom build step) I chose an arbitrary filename ".filename" if I were to get fancy I'd also have the script output a log to this file
Set the "Execute After" field to "FinalizeBuildStatus" This ensures that the command will execute after the build status has been established (which happens in all circumstances when you'd hit F5 or F6, even if you haven't changed any code in the project).
I was surprised not to find these steps clearly outlined elsewhere online. Perhaps I'm bad at googling, but since I solved my own problem I find it only fitting to share in case someone else has this problem.

Error starting the service. The OracleMTSRecoveryService was not found

I am getting this error while installing oracle 11g enterprise edition on windows 7 professional 64 bit. I checked the registry as some people have mention but the correct thing is already there. If try starting the service from Services.msc it says the service wss not found also
I ran into this same issue and this solved it:
When you get the error pop-up, leave it opened, open regedit and modify the ImagePath in the following key to point to the proper location:
computer\hkey_local_machine\system\controlset001\service\OracleMTSRecoveryService
The proper location may be something like this:
C:\app\myaccount\product\11.2.0\dbhome_1\bin\omtsreco.exe
All credit to:
http://yuanmengblog.blogspot.com/2011/08/oracle-standard-db-install-issue-with.html
The oracle download was split into two parts.
If you tried to install with only one part it will show many bugs and after installation oracle won't work.
Download two parts of oracle from the official site and extract in same place. The files will merge automatically into the same folder.
Now install the oracle. If you already installed the oracle once. It should taken some path like below.
In my system it took "E:\app\INDP\product\11.2.0\dbhome_1..."
If you are installing second time installation will take path, "E:\app\INDP\product\11.2.0\dbhome_2..."
Now the above erorr will come because of registry.
So, now yo need to edit the registry value like below.
ctrl+R will bring the run window. Type regedit and press ok
Then Under Computer, select HKEY_LOCAL_MACHINE -> SYSTEM ->ControlSet001-> Services -> OracleMTSRecoveryService.
Double click on ImagePath. It will prompt a window with old path or with wrong path under value data.
Now, you need to edit it with your curent path like below.
E:\app\INDP\product\11.2.0\dbhome_2\bin\omtsreco.exe OracleMTSRecoveryService
Now press "retry" button of the window, which shown that error. Now, it will work like charm.

How to get ONLY w3wp instances when specifying performance counters for Perfmon/LogMan on Windows?

Hopefully this question has a simple answer i'm overlooking! I have an IIS webserver with multiple sites on it. In Perfmon, they show up as w3wp#1, w3wp#2, etc... I'm writing a Logman script that will collect performance counter data using the counters/instances that I specify and I want to ONLY collect any w3wp worker processes.
I've tried a couple ways, but no luck:
\.NET CLR Memory(*w3wp*)\
\.NET CLR Memory(w3wp#*)\
\.NET CLR Memory(w3wp*)\
I've looked at the documentation here, and it seems like it claims to support wildcards, but not partial matches. I'm not sure what to make of that. Is there any way accomplish what I want? Hope I explained this well enough. Let me know if more details are needed.
Thanks!
There is a way to display the instance by appending Process Id to it. Since ProcessId do not change it helps determining the correct instance. This post describes the method - Perfmon: Identifying processes by PID instead of instance.
Relevant part from the link:
Making below registry change will display processes in the format of **ProcessName_PID** instead of **ProcessName#1**.
Click Start, click Run, type regedit, and then click OK.
Locate and then click the following registry subkey:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance
On the Edit menu, click New, and then click DWORD Value.
Right-click New Value #1, click Rename, and then type ProcessNameFormat to name the new value.
Right-click ProcessNameFormat, and then click Modify.
In the Data value box, type one of the following values, and then click OK:
1: Disables PID data. This value is the default value.
2: Enables PID data.
Exit Registry Editor.
Warning: Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall the operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk.
Important: If you enable this feature, you may be unable to monitor process-specific information by using third-party utilities or custom-made programs, and this functionality may change at any time in the future without notice.
Hope it helps someone.
I came up with a custom batch script that find the application pool ID, PID, and associates it with the IIS worker process in question. From there, I can manually FIND and REPLACE a generic placeholder in my perfmon configuration file to start collecting for the specific site(s). I can supply some details if there is interest.

VS2005 Setup project - program asks for installation media when started for the first time by another user

I have a very simple VS2005 deployment project that aims to install for all users on a PC.
All the application files are written to %Program Files%\MyProg. A shortcut is created in the start menu and the startup folder. No registry settings or anything else are created. I have set
'InstallAllUsers' to true.
The created MSI runs fine and installs the software. It works without any problems when running under the user account from which it was installed.
When logging in as another user, the start menu and startup icons are present. It attempts to launch the application however an installation window pops up and states that 'the feature you are trying to use is on a network resource that is unavailable.' The installer will only proceed if pointed to the original MSI file.
Why does this happen? I want my application to be installed completely for all users when it is installed by a single user.
edit: Solution
I was getting similar event log messages as shown on this page. In my case it turned out to be as simple as ensuring that the User's Program Menu had its 'AlwaysCreate' attribute turned to false. If it was true, windows would try and recreate the folder when a new user logged in. This somehow required the invocation of the installer and thus resulted in the 'please insert the installation media' prompts.
It is actually kind of hard to say without some more information. I would recommend checking on the rights in the installed folder (seeing if only the one who installed it has rights) and also checking the file list for the directory (to make sure VS didn't automatically place some files in the user profile). Let me know what comes out from those two steps and we can try to keep digging if that didn't shed any light on it.
Keep in mind chances are this is most def not specific to Visual Studio, look at this MS support article here where the same message is coming back for office.
I know this is an old post but I thought I'd add another cause and solution in case the above didn't work for you.
There is a bug in VS Setup and Deployment Projects which results in registry values being entered into HKCU instead of HKLM irrespective of the InstallAllUsers property being set to true.
You must use Orca msi editor to change the registry root for "DesktopFolder" and "ProgramMenuFolder" from either 1 or 2 to -1. The issue cannot be resolved via VS.
http://www.qa.downappz.com/questions/vs-2010-deploys-per-user-features-during-install-which-require-access-to-install-media.html

Why is activeX failing to create an object from a Labview executable?

Here is my scenario. I am using Quicktest Pro (VB) to create an ActiveX object from a Labview VI that I built into an executable. In the build specs of the VI I have enabled ActiveX server option (ActiveX server name: "MyLabviewProgram") and in the VI Tools>Options>VI Server: Configuration the ActiveX box is checked.
So in QTP my code is:
Set IvApp = CreateObject("MyLabviewProgram.Application")
Set Vi = IvApp.getVIReference("MyLabviewVI.vi")
Vi.Call ParamNames, ParamVals
Upon running this I get a Run Error on the first line:
ActiveX component can't create object: 'MyLabviewProgram.Application'
I am having trouble figuring out why it errors. From National Instruments website they have a step in on one of their community pages about "LabVIEW Executable Used as ActiveX Server". The step is after building the EXE, 5. Run the EXE at least once on the target to activate the .TLB file. I've run the executable but not sure what they mean by on the target.
Does anyone have a suggestion on what I need to do to get this working?
Your description sounds like you correctly created a vi .exe. "On the Target" probably means "On the Target PC". The EXE adds all COM registration entries to the Windows registry each time it is executed.
It sounds like you haven't verified the COM registration entries are present in the registry yet. That's the first debugging step.
Run regedit.exe and search for MyLabviewProgram.Application under the HKEY_CLASSES_ROOT sub-key. You should find an entry that contains a sub-key that contains a value that contains a GUID (a large hexadecimal number).
That "class ID" GUID should be referenced under the HKCR/CLSID key. That reference should contain a LocalServer32 sub-key with the default value pointing to your application's .EXE filepath with the /Automation argument appended.
It seems likely that one of these steps will fail. I can't say exactly which one without more information.

Resources