I recently developed an WinForm application that I wanted to run on my local SQL server using SQL Agent. I published the WinForm app via Visual Studio and copied the files (three listed below) over to my SQL Server where I ran the setup.exe program.
Application Files (directory)
MyApplicationName.application
setup.exe
My application installed and started up automatically.
Now that I have to schedule the job with SQL Server Agent I cannot find where the application was installed to on the filesystem. I can see the shortcut on the Start menu but it just points to a shortcut. The shortcut does not seem to have any indication as to where the actual application file exists.
I tried to point to the shortcut as the application SQL Agent should start but all I get is "junk text" in the path.
Visual Studio uses ClickOnce deployment to publish WinForms applications. The installation folder varies by Windows version. For example on Windows XP it is
C:\Documents and Settings\USERNAME\LocalSettings\Apps\2.0\
and on Vista and above it is
C:\users\USERNAME\AppData\Local\Apps\2.0\
Related
From Prerequisites on the setup property pages, I selected the option to Download prerequisites from the component vendor's web site
There is no Windows Installer 4.5 in the prerequisites to install option..
because every im installing my setup using the sqlexpr_x64_ENU.exe in custom actions to install, run the setup after the extracting sqlserver it pops up the window says
There is a problem with this Windows Installer package. Aprogram run as part of the setup did not finnish as expected. Contact your support personnel or package vendor
im using VS2017 on windows 10
Exclude MSI Engine: You should not include Windows Installer 4.5 with any package these days. This runtime is from back in the day of Windows Vista - we are long since on version 5. Windows Installer should be deployed only via Windows Update as of today - in my opinion. Leave the runtime out of your setup.
No Concurrency: You can not run an MSI setup from within another MSI setup via a custom action. This is due to technical restrictions. There is a mutex set when an MSI runs its actual installation sequence, and triggering another installation sequence from within it will fail. A similar answer on the topic.
Setup.exe Launcher: What you need is to install your pre-requisites via a setup.exe launcher instead. This runs installations in serial, not in parallel. Which version of SQL Server are you installing? I see only a couple of versions available in the Visual Studio Installer Project launcher.
Other tools have features to allow you to install a setup.exe with embedded packages of various kinds in sequence. I have explained a myriad of times how to do this in previous answers. Here are just a few that I found quickly:
SQL Server named instance with Visual Studio 2017 Installer project (basically exactly the same issue - I suggest WiX the open source, free alternative)
Custom installer for application in Visual Studio 2017 (I suggest WiX and several commercial tools that are easier to use - maybe try to read this one)
Cannot call command.exe(SQL Server Setup.exe) while calling C# CA with parameters
How to create a MSI file which simply copies a directory to Program Files? (tools list)
Combine exe and msi file in one installer
Visual Studio 2017 Installer Project - include VC++ 2015 Redistributable
The general situation:
The problem is not Windows Installer 4.5, it's the fact that you are trying to do a recursive MSI install (the SQL one from inside yours) which is not allowed and will fail.
The MSI 4.5 engine is pretty much obsolete, about 10 years old, and anyway it's not the issue, and it's not clear why you believe it is. But it IS in the Prerequisite list on my VS 2017 setup project prerequisites - see 3 - even though you almost certainly don't need it.
There are some SQL Express options available in the Prerequisites of the VS setup project - right click the project in solution explorer and choose Properties, then Prerequisites.
I'm trying to find ways while publishing application from Visual Studio 2015 to install SQL Server other than SQL Server Express edition if possible.
You can't. But if you need exactly SQL Express raw installation then you can to try this workaround:
You need to code application something like "net.Launcher", because ClickOnce application entry point (Launch .exe application) must be only .NET application. After client got it published, downloaded and executed - net.launcher.exe beginning download from some your local resource or server SQL Server installation package and saves it somewhere locally.
After download process down it's starts "sql express silent install" process and closing after finish. Don't forget to check installation status!
P.S. I didn't have seen any limitations about file size for manifest, so you can add package as zip archive or something like that as Binary content to you application (FCL have possibility uncompress it to temporary folder).
I have a Windows Forms application that I am using ClickOnce deployment for and everything publishes fine when I am attempting to publish in Windows XP. When I try the same publish feature in Windows 7, it hangs on the publish step.
I am using a UNC path (file share) to the server (Windows Server 2008 R2 with IIS 7). Why might this happen?
I never receive an error message and the process cannot be cancelled. I have to force-close Visual Studio and restart my Windows 7 PC because Visual Studio has some of the files locked.
UPDATE:
I was able to set full-control permission on the folder on the destination server for my domain PC, and I was then able to publish once. Then, every subsequent deploy hanged. I did notice however that it always hangs when it's trying to copy the Office Interop files. Why would this be?
UPDATE (2):
This is definitely related to the Office 2010 PIA files. Why would it not publish them? Again, this works flawlessly on Windows XP, but when I perform the deployment on Windows 7, the PIAs are not published.
It could be a UAC issue. Try running Visual Studio as an administrator when you do a publish.
We already have a C# application for Deploying Dll's to different environments(DEV/QA/PROD). This application when asked copies the required Dll's to Program Files folder. This was working fine in Windows 2003 server. But now we migrated our server environments to Windows Server 2008 which brings UAC into picture.
Now when we try to copy the Dll's from local desktop to Server Program files using our application the application is failing.
Can any one suggest me what is the C# code that can make my application to elevate it privileges which allows me to copy the Dll's to remote server.
Regards
Masthan
Add an application assembly manifest that includes requestedExecutionLevel of requireAdministrator.
That way your update program will be run as an administrator.
You could also change your installer to give all users Full Control to your application folder; that way any user could modify your application.
I'm developing a Windows Forms application using Visual Studio 2008 C# that uses an SQL Server Compact 3.5 database on the client. The client will most likely be 32 bit Windows XP or Windows Vista machines. I'm using a standard Windows Installer project that creates an MSI file and setup.exe to install the application on a client machine. I'm new to SQL Server Compact, so I haven't had to distribute a client database like this before now. When I run the setup.exe (on new Windows XP 32 bit with SP2 and Internet Explorer 7) it installs fine, but when I run the application I get this error:
Unable to load DLL 'sqlceme35.dll'. The specified module could not be found
I spent a few hours searching for this error already, but all I could find were issues relating to installing on 64 bit Windows and none relating to normal 32 bit that I'm using.
The install application copies the all the dependent files that it found into the specified install directory, including the System.Data.SqlServerCe.dll file (assembly version 3.5.1.0). The database file is in a directory called 'data' off the application directory, and the connection string for it is
<add name="Tickets.ieOutlet.Properties.Settings.TicketsLocalConnectionString" connectionString="Data Source=|DataDirectory|\data\TicketsLocal.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" />
Some questions I have:
Should the application be able to find the DLL file if it's in the same directory, that is, local to the application, or do I need to install it in the GAC? (If so, can I use the Windows Installer to install a DLL file in the GAC?)
Is there anything else I need to distribute with the application in order to use a SQL Server Compact database?
There are other DLL files also, such as MS interop for exporting data to Excel on the client. Do these need to be installed in the GAC or will locating them in the application directory suffice?
You don't need it to be in the GAC for SQL Server Compact to run, and it will pick them up from the application directory. There are several ways to deploy an SQL Server Compact project. The two main ways are:
Deploying the SQL Server Compact redistributable installer with your project, but this way is painful and also can be unistalled by the end user, or upgraded by Windows updates and breaking your application.
Including the DLL files in your application folder. Depending on the features of SQL Server Compact you are using (replication or whatever), there is a handful of DLL files to deploy in your application folder.
If you have SQL Server Compact installed on your machine, they are most likely located at "C:\Program Files\Microsoft SQL Server Compact Edition\v3.5". They can be added to the project in Visual Studio and then set their project output type to "copy always". And the main reference to System.Data.SqlServerCe that you have in your project references should have copy local set to true.
sqlceca35.dll
sqlcecompact35.dll
sqlceer35en.dll
sqlceoledb35.dll
sqlceqp35.dll
sqlcese35.dll
If you have these all set, then in your installer project all you have to include is the project output of this project and you're good. In my opinion this is the only way to go. It is a simple deployment, of a couple of files and you are in control of what DLL versions your application uses.
I hope that helps.
I had a similar problem, a Visual Studio 2008 Windows application targeting 32-bit Windows XP and Windows Vista that used SQL Server Compact 3.5 SP1 - that then got this error when installed on 64-bit Windows 7:
Unable to load DLL 'sqlceme35.dll'. The specified module could not be found
I was embedding an MSI for SQL Server Compact into the installer for the application.
Following this rather confused discussion on MSDN revealed that I needed to use the 64-bit MSI for SQL Server Compact on 64-bit machines. D'oh! That is, from page Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop I needed SSCERuntime-ENU-x64.msi rather than SSCERuntime-ENU-x86.msi for 64-bit machines.
How to: Deploy a SQL Server Compact Edition Database with an Application should help, at least with your first two questions.
In general, I think you should not install anything in the GAC for a single application.
The following provide a solution to the problem and an explanation also.
Troubleshooting: Can’t load SQL Server Compact DLL
SqlCeException on application's first use of SQL Server Compact
Laxmi Narsimha Rao Oruganti 's blog
I hope this helps.