Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
We had understood, MSIX is an interesting, modern alternative to ClickOnce.
Using with GUI runs smoothly. And we want also to use it with Powershell/CMD scripts. (We only want the msix package, no store upload.)
Here is our problem. I have seen the doc from MS (https://learn.microsoft.com/en-us/windows/msix/package/manual-packaging-root) but it is very partial. I have no special with to do, I only want to make the standard export by script instead of GUI.
Please, can anybody give me a better instruction/tutorial to easy create an msix-Package by command line?
Here the steps, I found - and partial questions:
Create Manifest.xml - Good documentation of the content, but where to save it? I use the folder with the *.sln
Generate a Package Resource Index - I find the MakePRI.exe, but hot to use?
Create the package with MakeAppx - who and where to use? Even in standard case I need a mapping.txt. Which files must it contain? All from Manifest? Where I must place the files - Server online or local at PC? Only pictures for icons? Where I must run it? Must it the place with the *.sln or can it be a subfolder? Where have the binaries of my program to be?
Create an app bundle - What must stand in the mapping file here, when I will an app for x86 and x64?
Sign msix - sounds easy - give msix-file and signature as parameter and run
You see, I am very confused. With GUI - MSIX creation is easy. But how to automate it? Can someone help me?
It seems to me that you are on the wrong track here, basically, you are trying to reinvent the wheel and create your own tool that builds MSIX packages.
This doesn't sound very effective to me. We (at Advanced Installer) and other vendors, Microsoft including, have been working for years to build reliable MSIX packaging tools, this is not a 1-month project task that you can start from scratch, without any prior domain knowledge.
What I suspect you need is actually a way to build from the command line a project that you created with Visual Studio, Advanced Installer, InstallShield, or any other tool that can build MSIX packages.
So basically, you need to use the GUI to initially build the project that will generate your MSIX and you can then go on to use the options below to build an MSIX from that project using the command line.
If I am wrong, and you actually need a way to build an MSIX package from scratch from the command line, please update the question with more details so the community can better understand what you are trying to accomplish in order to provide you with useful guidance.
TLDR solution:
So, the first step is for you to build your MSIX project using your tool of preference. From your question, it seems you are only using VS, so you need to use the Windows Application Packaging Project.
Now that you got the .SLN which contains your source code for the application along with your MSIX project, all you need to do is to trigger a build from the command line, using msbuild.
Note. If you are using a third-party tool to build your MSIX, then search for it's documentation, all professional tools have a command-line interface. Here is for example how you can build a project from using Advanced Installer's CLI.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I have a MVC project. I am not interesting a publishing my project. because after publishing it creates a single Dll. that times i am not able to change code of a particular page.
I want to direct upload a files or folders of MVC projects. Can It possible. if possibles, please explain me..
Regards,
Bharat Gupta
You can't. IIS is not a compiler and cannot compile your source files. It can, however, understand a DLL. When you publish your project, only the source code files (for example .cs) will be compiled and packed in the DLL. All other resources, such as scripts, images and even views, are shipped as is. You can only make changes within these files. This means that after publishing you can change your JavaScript code, or CSS styles or even "Razor code" inside your views (e.g. ".cshtml"), but you cannot change the code inside controllers.
I had my RadStudio setup all working and have created a very simple mobile app for android that uses IBLite to grab some data. For business reasons I had to leave the project and move on to other things. So I come back to Radstudio thinking I can just pick up where I left off.
I notice there is an update for the product so I apply the changes and then open up my previous project. From there things get very strange. I can build and deploy to android and the project still works. If I deploy to IOS simulator again no problem and everything works fine. As soon as I try to deploy to a device I get the following compiler error:-
[DCC Error] E2597 ld: library not found for -libtogo
(This is an outstanding question on Embarcadero Developer Forum)
Which looks to me like a problem with the licence file. So I try to manually add it to the deployment but still get the error. So I decided to park my project and go back to the IOS IBLite tutorial from the Embarcadero website. I get to the stage where I want to drop an sqlconnection to the form and connect to the database... No joy it comes up with unavailable database which I thought might be a licensing issue or the fact the IB Server was not running. So I double checked the latter and sure enough it is running as a windows service and I can use IBConsole to connect to it.
So I drop trying to create a mobile application and try to create a desktop app that connects to the dbdemos database. No luck, the ide still states unavailable database...
So to my question?
How do I get radstudio to pick up the license for Interbase and particulary IBLIte for IOS?
I have searched online and on the EDF and have been unable to find a solution.
Take a look to this link.
IBREDISTDIR environment variable should be properly configurated with the directory containing library folders and licenses.
RAD Studio links statically libibtogo.a probably this file is missing. This file usually is into ($BDS)/lib/iosDevice/debug path
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
EDIT:
NO LONGER RELEVANT. Due to difficulties with Installshield including not only this issue but also issues with getting it to build with the project in Visual Studio and its inability to replace one of the old files that needs to be replaced I am now coding an installer in C#. I should have done this earlier because I'd be done by now. Thank you Christopher Painter and Michael Urman for trying to guide me though this issue. Unfortunately I did not get anywhere further with it.
ORIGINAL POST BELOW
Honestly, this has been like pulling teeth. I hope that I'm missing something blatantly obvious. I have been trying to get Installshield to let me set the INSTALLDIR to an environmental variable. This is necessary because of the way the company does things. I know I can set it outside of the installer via a batch file which calls the MSI and passes the folder via an argument, but that solution ended up with an unfriendly MSI. If anyone has any internal solutions please let me know.
Windows Installer has the Environment table that is exposed by InstallShield in the environment view and component | advanced settings | environment view.
Setting Environment Variables
Windows Installer allows you to refer to environment variables using a variant of property notation. I would suggest an approach similar to RobertDickau's, where you use a set-property custom action early to set INSTALLDIR from [%SOMEVAR]. Only run the custom action if INSTALLDIR isn't already defined, so that people can override INSTALLDIR at the command line. Note that this must be run before costing, or you will have to find a different condition and use a set-directory action (like Robert mentions) instead.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
The community reviewed whether to reopen this question 10 months ago and left it closed:
Original close reason(s) were not resolved
Improve this question
I've been thinking of rolling my own code for enabling my Delphi application to update seamlessly as I'll be going for "release often, release early" mentality furthermore. There are various Delphi solutions (both freeware and paid) out there and I'd like to ask if you've been using any of them or simply went on with your own solutions in this area. Any comments on the auto-update topic are welcome.
What ever scheme you use, it may be handy to know that you can actually rename a running .exe file. So rename file, copy in new file works nice. And the next time someone launch the program they will launch a the new version. This is ofcourse very handy in enviroment where many users run the same .exe file, like in citrix/terminal server/network share cases.
Years ago I wrote a simple tool which is started instead of the real program, checks for updates, loads and installs them (if any are available), and finally starts the real application.
There are however problems with that approach if your program works in a properly administered environment, where users normally don't have write access to the program directories. You can no longer simply update your own program in such environments. That's why a lot of programs these days come with their own updater tool, which can be installed to run with elevated permissions, so that program updates can be applied even though only standard users do ever log on to the system.
You have to decide whether your target audience can be assumed to run on power user or administrator accounts, or whether you will have to deal with above-mentioned problems. With Vista things got considerably harder already.
With all these problems (net access over proxies, missing write permissions for installation directories, the need to update files that the updater itself is using - just to name a few) I wouldn't try again to code this on my own. Much better to check if any one of the available solutions does all you need it to.
I use the Synapse routines GetHTTP to return a specific resource, and if found then check against the local system to see if an update is required. If so then the resource tells me what page to go to launch and I throw the URL into shell execute so the users
preferred browser is displayed.
Most of the time the download is a setup program created by InnoSetup which updates the users system and database to the latest version. When a new "paid" upgrade is needed, I then send the user to a "purchase upgrade" form. My web resources are ASP pages, so I can redirect to a different resource based on the customers version number.
For the main application (our application has a server piece, and a client piece) I have a loader which will check the server to see if the version of the client file on the server is different than the version on the client...if so, it prompts the user if the user wants to update/revert. We chose to prompt the user as sometimes an accidental bug might make it into the system and the user has to downgrade/upgrade only specific machines to help troubleshoot. I maintain a database record with the minimum version required which is updated via the database patch, so if a version must be retired then the record is updated accordingly.
I created my own solution too based on Indy for downloading and http://sourceforge.net/projects/makeupdate/ for file patching.
Before that I have used and tried several commercial tools, but no one was doing exactly what I needed.
I use TmxWebUpdate. It's free, simple and gives you good control over the process. I actually own TMS Component Pack with TWebUpdate but never really found a good reason to switch.
Edit: Link updated
We rolled our own as well. Its really not too difficult.
Our process goes something like:
When the main app is launched, it checks (using funcs from the synapse library) if there's an update available (assuming its configured to check, of course).
If so, it notifies the user and askes if they want to update.
If they do, it launches an updater .exe, and closes the main app.
The updater exe downloads the new files based on the contents of a text file it retrieves, keepiing the files in memory.
When the updater is done downloading everything correctly, it then saves the downloaded files to disk, backing up any files it replaces. This way if the download gets interupted, you dont end up with half the files installed.
Finally, it launches the main app again, and closes itself.
The trick w/ Vista is that you need to have an entry in the updater program's manifest to force it to run with administrator rights.
Normally we use the third party tool. But in some situations it was not usable so I created an own solution, which was pretty standard:
Get xml (or any other format) with update info.
If newer files are published, download and install them.
I use TWebUpdate . It works ok and has a ton of interesting options, but documentation isn't so great and I did bump into a few problems - which is why I download a full installer, instead of just the files...
I will be keeping an eye on this question, btw...
We use our own solution which follows these steps:
Application connects to http resource and downloads info file (ini text file) to memory, checks version number of newest release.
If newer version available, app downloads compressed binary package to exe location.
When download is finished, user is asked to restart application.
Upon start, application checks for presence of update package
App extracts package contents (usually a new app exe, but additional resources possible as well, e.g. updated language files etc.) - for each file it renames the current/old file to a temp name first, then extracts the new file. If the process fails at any point, the temp files are restored.
When finished, app executes new exe and closes itself.
No additional updater needed, the app exe can handle it all by itself.
For the compressed package we use our own update builder.
The package contains an index of files with a file hash, destination folder (relative path to main exe) and the compressed files.
During update we compare the stored hash with the extracted file to detect corupted files.
With Vista I see two solutions to enable Standard User Accounts to actually update the applications files:
Configure your setup to change permissions of the programs installation directory. This way files in "C:\Program Files (x86)\Your Company\You App" can be modified on Accounts with limited rights.
Example code for InnoSetup would be:
[Dirs]
Name: "{app}"; Permissions: users-modify
Install files that you plan to update to the ProgramData folder instead of the user defined directory and use this directory as an override folder. If files exist in ProgramData, use those, else check in install dir.
InnoSetup code:
[Files]
Source: "C:\Your Project\YourApp.exe"; DestDir: "{commonappdata}\Company Name\App Name\";
Same as "stg" and "GuyWithDogs", I'm using TWebUpdate from TMS. Although the documentation isn't so great, Its not so difficult to learnt.
With TWebUpdate, you have some options what the protocol you use, it could be done via HTTP, FTP or network access.
For communication layer, TWebUpdate uses WinInet. In some machines, the windows / IE URL cache can be frustating, so I've added a routine to clear the auto-update server address from cache first to ensure the information gathered from the server is up-to-date.