I want to create a setup file for an application that uses the following tools and technologies:
Microsoft visuals studio 2013
MSSQL server 2012
and I have used winforms and C# to write the program.
My questions are:
If I want to deliver the application to customer without giving out the source code what technique or tool should I use?
How do i supply the database? Should I detach it? How do I provide the database with my application?
I'm assuming you need to deploy the application you've created with Visual Studio rather than deploy Visual Studio itself. In which case you have a variety of options depending on its destination.
You can just copy your executable and required dependencies to a destination without distributing your source. However, there are several tools out there that will subsequently disassemble your assemblies to reveal the source.
The Visual Studio website has a list of options for deploying applications. If you want a tradional Next -> Next -> Finish type of installation, I would suggest using InstallShield Limited Edition.
For SQL deployment it would depend on the Edition you have used and whether the server already exists at the destination. Additionally, it will depend on whether you only need to deploy the schema or populate the database too.
You can distribute SQL Server Express with your application. SQL Server Management Studio will allow you to generate a "CREATE DATABASE" script (right-click database -> Script database as -> CREATE to -> File) from your existing database that can be executed as part of the installation. Alternatively, consider a backup/restore approach as detailed in this article.
Related
I'm coding a C# Console Application that connects to a database and runs some queries where my database Engine is Microsoft SQL Server 2016 and I code in Visual Studio 2015. I have already installed and activated InstallShield Limited Edition on my visual studio and I'm able to make an installation(setup) file for my C# Console Application.
I don't want to to install Sql Server on my customer's PC and attach the database to that manually, instead I want to give everything in an installation file that includes .Net framework 4.5 and my database. The first part(.Net Framework) is done by InstallShield easily, but I don't know how to attach my database to the installation file.
Please explain how to do this and if any other version of InstallShield(Express, Professional or Premier) is needed let me know and explain the steps in that version.
Note that I want to give the installation file to the customer and make every feature of the app function well after he/she installs the program without needing to do anything manually.
Sql server 2016 cannot be installed automatically as it needs to be configured by the user, he must set the instance names, permissions and so on, which makes it unusable for your scenario.
What you need to use is Sql Server LocalDB, this is a subset of Sql Server Express for your concrete scenario, something which can be installed without the need of configuration and capable of attaching a database file also without user interaction.
You can find information about LocalDB here, as you see it can be downloaded as a .msi, in this way you can add this msi to your installshield project and chain it (more info on how to chain an installer here), it will not ask to the user about complex configurations, just a simple installer. To download the .msi you get the sql server express installer on your development machine and instruct it to download media and select the LocalDB package, that will give you the .msi.
Finally you will add the database file as part of your project files, then you only need to specify on the connection string the path to the file.
I have a team working on a project. For the purpose of collaboration we are using Team Foundation Server.
Now we want to create a shared database so that each team member can connect to the database, manipulate it, and retrieve data.
I've already created a SQL Database Project and I've added it to TFS but I don't know how to connect to it from my code ?
The SQL Database Project is just a representation of the database schema and objects. It isn't a database that you "connect to".
Instead you will need a SQL server running somewhere. You might decide to run it locally on each of your dev machines or have a common server that everyone accesses. Either way, a regular SQL server needs to be installed somewhere.
This doesn't have anything to do with TFS. This is just a Visual Studio project like any other.
What exactly do you mean by "connect to it from my code"? .NET code doesn't directly interact with a database project, but can form a data access layer to interact with a database.
If you right-click on the database project in Visual Studio, there is an option to deploy (or perhaps publish, depending on the Visual Studio version). You can deploy the database project to a live database and then your .NET code can interact with that database.
This can be multiple databases. For example, your automated builds can deploy to a shared database for everyone to use, and individual developers can deploy to their local workstations for development and debugging purposes.
The Sql Database project is not a database in itself - it is a project that describes a database. You need to deploy that project (typically to an instance of Sql Server) in order to connect to it in the way you describe.
In a typical team development environment, each member of your team might have their own local instance of Sql Server, and deploy the project to it. In this way, your team members won't get in eachother's way as they create and delete data during the course of development. You will possibly also want a shared instance for a more formal testing environment.
So ultimately, what you've created is not a shared database: it's a template that a database can be created from.
I created a WPF C# application and using entity framework to connect to an SQL database, and read write data to it.
My application have multiple library projects and the main project that contains the UI.
I want to build the application in order to sell it. I want to have something similar to a normal application, where you have a main exe executable and .dll diles that represent the other projects and libraries used.
I also need to have a setup file that will setup the application as normal applications do.
How can I do that?
Will I have to do something with the SQL database in order to build with the project or that is done automatically?
If you have VS2010 you can use VS2010 based "Setup and Deployment" project template to create a Setup project and chose any of the given type i.e. CAB with Setup.exe or MSI or web Deployment which is suitable for your distribution. The UI is as below:
You can also try 3 party Installation project i.e. InstallShield etc also.
For SQL DB there are separate ways to distribute the database. If you have SQL Express or SQL CE then you can package it and ship with main project as described here. However for SQL Server, you just need to create a database deployment script and documentation about your data base first and then package it with main distribution. Or it can be done separately.
I just finished writing a large program that uses a pretty large database file. In the past, when I finished writing programs, I just uploaded the .exe file to my website and sent the link to whoever wanted to use it, but now there's also a database file to include..
Is there a way to "wrap" the database file in the .exe? If not, how can I release my program so that the user only has to download one file? I've never created an installer, nor do I really know how.. I've only ever just uploaded .exe files :).
Any help would be appreciated. Excuse my inexperience :P.
The program is programmed in C#, and the database file is in .mdf format (I am running SQL Server 2008). I'd be happy to provide any more details. :)
Instead of bundling the entire database, you should make the application know how to create the database. A simple way is to create a script for the entire database in SQL Server Management Studio. Then include the script (probably after you've made some adjustments to it) in the exe file as a resource file.
A better approach than rolling your own solution is to use a data access framework such as EF Code First with Migrations that has database creation and upgrade support built oin.
You can make simple setups from visual studio (Create new setup project). If you need more advanced features, have a look at Windows Xml installer
You can include the free Sql Server Express so your users don't have to buy a license of SQL server. If you want to go through the effort of building an .msi installer, I believe you can do SQL-server - specific actions.
On the other hand, if you have a small amount of data, you might consider using the filtering features of Dataset instead of relying on SQL server.
Edit: Microsoft has a new SqlServer 2012 LocalDB that might be interesting:
New to the SQL ServerĀ® Express family, LocalDB is a lightweight
version of Express that has the same programmability features, yet
runs in user mode and has a fast, zero-configuration installation and
short list of pre-requisites. Use this if you need a simple way to
create and work with databases from code. It can be bundled with
Visual Studio, other Database Development tools or embedded with an
application that needs local databases.
(excerpt from here)
I have a .net application in c#. I am using SQL Server 2005 as database. I want to create setup for it. I want that when I run setup it automatically installs SQL Server 2005 which I add in prerequisites.
Please help how to create setup...?
The paid versions of Visual Studio come with the ability to create installer packages, however, that feature is miserably lacking and is being removed in VS11. I have used it, and I can say, its not worth using. There are other free deployment tools out there. I recommend Windows Installer XML.
VisualStudio does have New project -> Other project types -> Setup and Deployment -> Setup Project. As Kendall noted this is a very limited/basic installer solution. However if really all you want to do is have SQL Express as a prerequiste and you app installed then it can manage that (but not much more).
To setup a prerequist:
Go to project properties (right click on setup project -> properties)
and you will find a "Prerequisites" button on that dialog.
This brings up a dialog that lists all the bootstrapper packages that are
located in "Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper"
folder. Select/cehck "SQL Server 2005 Express Edition SP2 x86" if
thats what you want.
If you want the full version of SQL server then you will need to find a bootstrapper package for it - googing that (sql 2005 full bootstrapper package) should yeild a result.
Note that SQL server 2005 will limit you to an x86 install - if you want a x64 install use SQL Server 2008 Express/full.
You could create a Setup project in Visual Studio.
It can create an offline setup, which can include prerrequesites or be configured to download said prerrequesites from an online location when installing the offline setup.
http://msdn.microsoft.com/en-us/library/2kt85ked.aspx
Before going into this, though I would like to share my very bitter experience using SQL Server as a prerrequesite, and why you should really avoid it (whichever deployment system you use, actually).
See, the prerrequesites that are available to your Visual Studio instance depend on a folder present on the same machine where VS is installed:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages
(this is for VS 2010, replace v7.0A with v6.0A for VS 2008, and replace Program Files with Program Files 9x86) if you're on 64 bits).
You can go check it now, you will most likely see a list of folders, called bootstrapper packages, which have this basic structure:
product.xml : an xml file describing the prerrequesite to Visual Studio. This file is the most important one. It lists:
the files that are needed to install, upgrade or uninstall a prerrequesite
the conditions to evaluate in order to decide which action to undertake. For instance: is the system x86/x64? is the system xp, server 2003, etc? is the prerrequesite already installed? which version? which language?
the actions to undertake depending on these conditions. Generally, the command line arguments to use with the exe file you are installing.
a bunch of executable files (msi, exe): the files needed to install the prerrequesite (there can be none if the product.xml refers to online locations where to get these files).
optionnaly, some folders with a locale name: the localization for your prerrequesite.
Now there are two major categories of issues with this system:
drawbacks of this setup system:
First, the product.xml file is very difficult to build. It will most likely imply you to calculate checksums, create certificates, explore Windows Installer install log files, use a very buggy tool called the Bootstrapper Manifest Generator. You will find yourself googling problems, and the only result will be your own unanswered Stack Overflow question. Trust me, I've been there.
Second, this whole boostrapper thing is litteraly out of (source) control, and an insult to the concepts of team work and continuous integration. Having your project install configuration in Program Files means:
it has to be the same prerrequesites for all your projects.
no versioning.
you must keep the whole prerrequesite folder consistent across all machines that could build the solution, including the CI server (which can be a massive hussle if it is used by several teams).
drawbacks of SQL Server as a prerrequesite:
At first sight, the SQL Server install command line seems quite straightforward. You decide the name of the instance, if it's an install or an upgrade, access rights, etc. The thing is, I cannot count the number of issues you will encounter on your path when you actually try that in real life:
SQL Server won't upgrade from a language to a different language.
SQL Server won't upgrade from SQL Server x86 to SQL Server x64 on an x64 system.
SQL Server not en-US won't install on en-US Windows.
More generally SQL Server will most likely fail to install if anything close to SQL Server has already been installed on the same machine.
If you run the setup manually, it will tell you why. But if you try to do it as prerrequesite, it means that you have to foresee every single configuration issue that could possibly happen. Believe me, you will never see the end of it: there's a reason why the SQL Server Setup is so complex...
Now what could you do?
Ask your clients to have SQL Server installed. It is a decent option, and they have to manage the SQL Server license anyway, since they are the ones using it. Maybe they already have it.
Install it yourself.
Use a different version of SQL Server, like SQL CE. Very lightweight, some less functionalities but if your just want a local database it can do the trick.
Use a different RDB system. I don't know them, maybe they are easier to install.