I'm working on an installer that, among other things, installs a web server.
As part of the setup, I'm setting up an ODBC driver and data source. I'm
trying to put a bunch of utility files, including the third party ODBC driver DLL,
into a certain folder, but when I run the installer, it insists on changing
that directory to the SystemFolder directory. Why is it doing this, and is
there any way that I can make it install the files where I want them to go?
Strangely enough, it was actually working correctly up until I added a bunch
more files to that particular folder. In case it's relevant, the files that I'm having trouble with are in a merge module.
(I'm temporarily getting around the problems that this is causing by
installing the DLL to the SystemFolder, but I'd much rather avoid DLL hell by
having it installed where I want it to go, not where Windows Installer seems
to think it should go.)
I should also point out that I'm using Wise Installation Studio 7.0 as my development environment.
It would seem that it's not Windows Installer that insists on the ODBC Driver DLL being installed in the SystemFolder directory, but Wise. We found this solution for getting rid of an Error 1918 problem that we were also seeing, which says to take the driver entries out of the ODBCDriver table, and stick them in as Registry entries instead. After implementing that fix, we tried moving our DLL to where we really want it to be installed, and the installer was happy with that.
Related
I need to migrate an enterprise production database from a Windows source machine running Postgres 9.5 to an Ubuntu destination machine running Postgres 11.6 with < 15 mins downtime. I plan to do this with pglogical, which requires the extension being loaded on both source and destination. I am having trouble with the source side because it is Windows.
I have very little Postgres-Windows experience and can neither find any helpful literature on the specific situation nor can I figure out for myself how to presumably install from source.
I've dug and dug and so far the only answer I've been able to find is "ugh... Windows". It seems like the only way to build from source is using Visual Studio, which I don't have or know how to use.
Sources:
https://www.2ndquadrant.com/en/blog/compiling-postgresql-extensions-visual-studio-windows/
https://postgrespro.ru/list/thread-id/1835275
Alex, the 2ndQuadrant article you link to in your own comment solves this. A few of the project or build options noted there have moved a little bit in the newer VisualStudio Community editions, so I can see where you got hung-up.
Just for kicks I compiled 32-bit DLL on my oldest Windows instance. I included the /Release path so you can grab my DLL & see if it works for you. It's (a) 32-bit because I'm assuming worst-case for an old v9.5 install, and (b) targets Postgres 9.6 because that's what I had installed. Unless there were major API changes though, it should connect to v9.5 without any issues:
https://github.com/mbijon/winpglogical/tree/master
If you find you need a version that entirely matches Postgres 9.5, grab my solution files & VS Community 20xx. Load the project & update the Additional Include Directories in Project Config to target your v9.5 paths. That should be all that's needed to link v9.5 Postgres libs.
I am packaging my app into exe with javafx-maven-plugin. x64 version works well. But then I package x86 version on 32-bit Windows 7 (running in VirtualBox if that's important) with 32-bit JDK 1.8.0_161 and 32-bit Maven. The resulting application installs, but fails to run, claiming that MSVCR100.dll is missing even though it is in the runtime\bin folder. I googled around and found out that this is a JDK bug that was supposedly fixed way back in u40. So why does this still happen?
If I copy that dll manually next to the .exe it starts on one machine (again, in VirtualBox), but for some reason silently crashed on another (real one this time, fresh installation). Found an identical problem in javafx-gradle-plugin issues, though it got resolved when building on newest Win10 version, whereas I'm building on newest Win7.
If I just install Microsoft Visual C++ 2010 Redistributable Package then everything works, obviously, but I don't want user having to do that. So how do I copy .dll with Inno Setup script and how do I figure out the reason behind silent crashing?
I don't think this is related to Windows being 32 bit and it just happens to coincide with your two testing computers. I posted a question that is related here: Failed to find library: jvm.dll. What's going on here?
What you are experiencing is likely a bug on java(fx)packager as described here: https://bugs.openjdk.java.net/browse/JDK-8191176. That bug report claims the bug started on 8u155 and was solved by 8u171 but I am experiencing the bug all the way to the latest 8u172 b03 as I describe here: https://github.com/javafxports/openjdk-jfx/issues/59
I also tried going to 8u144 before the bug existed and I found that building the installer fails because of a missing MSVC dll (surprise! surprise!). I described the problem here: Where/how to get the MSVC dlls Java 1.8.0_144 wants?
There may be another .dll on which MSVCR100.dll depends and which is not present on specific machine.
That is a reason why the Redistributable Package installs everything together.
Try to find another dependencies using http://dependencywalker.com/, it looks like you need more dlls than MSVCR100.dll.
Or simply install Redistributable Package on each machine. Installing it multiple times does not harm any application or system.
I want to install and setup QT + various modules, its says there is 20GB of downloads for what I have selected.
How can I save these somewhere for use on another PC and have them installed, by using the Maintenance Tool?
Is there a storage folder the downloads are kept?
20GB - that cannot be right, unless you are installing "everything". Just stick to a specific version of the framework for the compiler you want to use.
Also, no, Qt installations are not portable, thanks to a bunch of hard-coded paths. I may work if you put it example the same place it is on the other machine, I am not sure and I haven't tested this. There is also a binary patcher project, but it doesn't look to be maintained.
It would be more efficient to download the offline installer for the version you want, now that will work on other machines, so you can save yourself the downloading: https://download.qt.io/archive/qt/5.8/5.8.0/
Hoping that I do this corectly.
I am having the above issue. My development machine is win7 64. Im developing x86 application,(x86 set in compile options). I have downloaded sqlite-netFx40-setup-bundle-x86-2010-1.0.81.0 as my app will be on .net4. I have referenced the above dll, set it to copy local. Can confirm that its in the deployed dirrectory. Tests OK on development machine both as a debug and a fully instaled app. When I put the app on a separate win 7 64bit it wount run due to the Dll. It installs ok into ProgramFiles(x86) and runs untill the database is required. The dll is in the instaled dirrectory when instaled on the other PC. (fresh win instal).
I am using InstalShield and it is also telling me about an error ' -6248: Could not find dependent file system.data.sqlite.dll, or one of its dependencies of component' but it compiles OK.
Im stearing at the Dll in the program , in the references, the intelisence picksup the SQLite name and all the code is right. I have referenced by browse and then finding the dll.
What on earth could I be doing wrong ?
This has had so many views that I decided to answer this so as to help others.
The problem isnt a big deal once you know what it is, despite the error message that sends you almost in the wrong dirrection. The problem isnt the DLL, its one of its dependancies. Basicaly you have to install C++ distributable file on the client machine , even if you are using VB.net. I cant take credit for the find, it comes from here http://justanothersoftwareengineer.blogspot.com.au/2011/08/how-to-make-systemdatasqlitedll-work-on.html.
I'm having problems compiling applications with remote ant, something similar to this. However the flex compiler seems to have problems with this. When I run the same script on my local compiles everything without any problems but when I try the remote ant it fails without giving more information.
Things to look for on the remote machine:
The paths in the build file need to be valid (I'm pretty sure the script file you use to build the project on your computer, will not be good on the remote one because of a possible difference in paths)
You need the Flex SDK installed
You need Java JDK installed
You might also need some environment variables set correctly (like JAVA_HOME)
ANT binaries on the remote machine (but I assume you already have this, probably coming with the system you're using)
The sources to be compiled, obviously (I assume you already have these too, probably gotten by your system from a repository)
Also I find it hard to believe it would fail without any error. There should be at least a log file somewhere to give you an idea of what went wrong.