C++ Builder .exe program in other computers - exe

I’m working in a Program for the University using C++Builder 6.
The program works perfectly in my computer, but it doesn’t work in any other computer.
I have already disabled the PACKAGES->BUILD WITH RUNTIME PACKAGES and the LINKER-> USE DYNAMIC RTL options.
What else can I do?

With these options disabled, you will be able to run your application on any computer, except:
If you are using a component that requires installing another resource. For instance if you are using SQL, it will run, but obviously it will not use SQL functions if no SQL resource is installed on your computer;
If the Windows version cannot run it. E.g., you cannot run it on Windows CE, Windows 3.1... except if you compile it to run on these different versions.
Just to optimize your .EXE file, just press the Release button on Project > Options > Compiler, so debug data will not be stored on it.

Related

How to configure Mabinogi to run in Lutris?

I'm attempting to play Mabinogi by Nexon on Linux Mint 20 (Ulyana) using Lutris. I've previously used Lutris to play Heroes of the Storm but otherwise don't have much experience with it (or with gaming on Linux, in general). There's no installer on the Lutris website for Mabinogi like there was for Heroes of the Storm, so I was on my own to try and figure everything out.
What I've tried
I started by downloading the Nexon Launcher Installer from their website. I configured Lutris to launch this executable using Wine within a simulated Windows environment. When it first launched I noticed several files were created ("drive_c", "Program Files", "Users", etc -- mimicking a Windows file system). The launcher installer ran without issue and I installed the launcher to "C:\Program Files (x86)\Nexon"
I then re-configured Lutris to try and launch the Nexon Launcher instead of the Nexon Launcher Installer. When I hit "Play" in Lutris, nothing happened. Running ps -ax | grep "Nexon" showed that it was theoretically running, but there was no window or visible UI even after several minutes of waiting. I checked the Lutris logs and noticed a message about a file missing (something like "10000.manifest.hash"). I Google'd this error and found plenty of people in Windows who had trouble running the Nexon Launcher with the same error, and the solution was to just install Mabinogi through Steam.
So next I downloaded the "Wine Steam" runner in Lutris and set this as the runner for Mabinogi, plugging in the app ID (212200). After Steam installed, launched, logged in, and downloaded Mabinogi I tried to launch the game. This time I saw a window pop up saying "Mabinogi is launching" and in the bottom-right the Nexon Game Security icon popped up, but then everything closed and the game never started.
Finally out of desperation I tried setting up a virtual computer using VirtualBox to play the game in its native Windows environment. I installed Windows 7 (the minimum required version according to the Nexon website). I downloaded Mabinogi through Steam on the virtual box. Upon trying to launch Mabinogi, I received the error error: "api-ms-win-crt-runtime-l1-1-0.dll is missing". I'm curious if this error is related to why I couldn't get Mabinogi working in Lutris.
Looking at a game that I had previously played in Lutris (Heroes of the Storm), I noticed a very similar DLL was listed in the "DLL overrides" section: "api-ms-win-crt-private-l1-1-0.dll". So I tried adding the runtime DLL to the overrides in Mabinogi with the same value ("n,b") - but this didn't work.
Looking at the Lutris logs when I try to launch Mabinogi through Wine Steam, there are several errors from \main\game-launch.js:109. I'm not sure if this JS script is part of Lutris of part of the Nexon Launcher, but it could provide some hints. Among the logs the following lines stand out as potentially meaningful:
...
ERROR: ld.so: object '/usr/$LIB/libgamemodeauto.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
...
fixme:d3d12_get_vk_physical_device: Could not find Vulkan physical device for DXGI adapter.
fixme:d3d12_device_caps_init_feature_options1: TotalLaneCount = 2560, may be inaccurate.
...
warn: OpenVR: Failed to locate module
...
What I don't know
I'm not familiar with using Wine and I've never written a Lutris installer. Up until now I've only ever run Linux binaries on Linux and Windows binaries on Windows. So there's a lot I don't understand, like: What's Vulkan? What's DXVK? How do "override DLLs" work? Do I need to provide alternative DLLs for anything I want to override? What does the value "n,b" mean in the DLL override?
I'm welcome to any help
After a lot of work and research, I've gotten as far as I can and figured out where the major road block lies. The simple answer is: You cannot run Mabinogi in Lutris
Mabinogi uses an anti-cheat system that runs in kernel mode (ring 0). Wine runs in user mode (ring 3) and therefore cannot run this anti-cheat program.
The only solution is to play Mabinogi within a virtual machine (e.g. VirtualBox), since VMs run on a hypervisor (which from my understanding is kind of like a "negative" ring number, but effectively ring 0)
If you want to try some other Nexon games, I got the Nexon Launcher working in Lutris / Wine fairly easily. The trick was to download the latest Nexon Launcher since the older one (linked on the Mabinogi website) isn't sending a valid request to download the manifest file so it gets a 403. The latest launcher can be downloaded here: https://games.nexon.net/nexonlauncher

Remote development of Visual C++ applications from Linux

Remote development on Linux from Windows is easily doable via SSH.
However, what about the other way? I need to build and debug my Visual C++ application on Windows, but I want to work on a Linux system.
Cross-compiling via MinGW doesn't work because of MSVC-specific libraries
Ubuntu on Windows is a good start, but I'd like to work on a real Linux system
RDP/VNC or something like that doesn't help either, because than I'd work on Windows again
So does a virtual machine
Maybe something like Powershell on Linux + SSH to the Windows Powershell?
I regularly develop Visual C# applications remotely from Linux, not MSVC for the most part, but, like you, I wanted to find a way to build and debug Windows-targeted applications and libraries on remote Windows machines without working directly in the box using RDP, Visual Studio, etc.
It's difficult to answer this question without more information about the development and debugging tools you prefer to use on Linux for the types of applications you develop. I'll try to provide a general overview and update the answer for details you add about your workflow.
Cygwin, similar to MinGW's MSYS, provides a Unix-like environment for Windows. Most importantly, Cygwin, unlike MinGW/MSYS, includes an implementation of the OpenSSH server that enables us to connect to the Windows box over SSH from Linux (or any other device with an SSH client, really). We can install the sshd package using Cygwin's setup utility. After connecting, Cygwin drops us into a Bash shell by default. With this capability, we can:
Execute remote commands and scripts over SSH.
Edit files using our favorite *nix command-line text editor (Vim, Emacs, etc.)
Mount remote filesystems locally using SSHFS (if Windows shares are unavailable).
Forward or tunnel ports if needed.
The availability of a general-purpose shell makes almost anything possible. We can execute batch files, PowerShell scripts, and native Windows executables from Cygwin's shell environment in addition to Linux scripts and Cygwin programs.
For example, we could run msbuild from the SSH session command line to build our VC++ application or we could configure our local GUI editor or IDE running in Linux to execute msbuild over SSH when we click the "build" button.
We could set up a similar environment in recent versions of Windows using the Windows Subsystem for Linux ("WSL", Bash on Windows). I personally prefer Cygwin for greater portability and ease of configuration. Cygwin's sshd can run as a Windows service, and, as an established project, Cygwin integrates very well with Windows systems (user accounts, filesystems, Windows APIs, etc.).
Working with Code
We can choose from several workflows depending on our tools and comfort-level with the command-line:
Completely text-based—all work performed through the SSH session
Use local tools on files mounted in a remote filesystem
Use local tools and synchronize files
I use the first approach. I'm a heavy Vim user, so I connect to Windows machines over SSH to do my work on the command-line using the tools and environment provided by Cygwin. The availability of tools typically found on Linux simplifies many tasks that are hard to do from the default Windows console. We can write shell scripts to automate tasks that Visual Studio might normally do for us. For example, I wrote a wrapper script around mstest that reads the XML test results and outputs them in a format that's easy to read in a terminal.
If we prefer to use a GUI editor or IDE, we can mount the remote code locally so tools can read and write files as if they were part of the Linux machine's local filesystem. We likely still need to use SSH to execute commands needed to build the projects, but many editors allow us to configure this command as the project's "build" action.
Sometimes a remote filesystem is too slow for effective editing. In these cases, we can synchronize files between the Linux development machine and the Windows host using a tool like rsync or the editor's "upload on save" feature (over SFTP, for example), if available.
Debugging
Everything works pretty well until we try to find a way to debug our applications. As of now, there is no reasonable substitute for Visual Studio's debugger when working with Visual C++ projects. We can debug managed C# applications running on the CLR using MDbg, but no comparable tool exists for C++ programs.
We can try to use gdb (from MinGW, Cygwin, etc.) for basic, low-level debugging of native binaries, like reading memory addresses, but the debugger does not yet support reading Microsoft's debugging symbols, so the debugging experience is very limited. Microsoft began documenting the PDB format a couple years ago, so we may see some compatibility in the future. Even so, it will take a long time to produce a satisfactory alternative to Visual Studio's excellent debugging tools.
For debugging, RDP is currently our best—and probably, only—option. For a more native-feeling experience, we can run Visual Studio using rdesktop (or other RDP client) and seamlessrdp to create a single-window RDP session of the Visual Studio IDE instead of a full desktop which integrates with whatever window manager we're using on Linux.
Sometimes we can get around launching a full Visual Studio debugging session for simple debugging scenarios by adding tracing to our application that outputs values to the console or to a log file. In many cases, this is faster than starting the debugger anyway.
We can also try to use Eclipse's CDT debugger configured for the Visual C++ toolchain. This may enable us to perform remote debugging using an Eclipse instance on the Linux machine. I have never tried this approach, and I expect there may be some issues when the application is linked against Microsoft's libraries.
I don't know all your requirements, but maybe you could use a gdbserver on Windows (from MinGW) and remote debug from VSCode on Linux - or any other environment you like. You can find more details in this post here. (Watch out, VSCode prevents you from running gdb unless it’s signed as mentioned in the first link.)
There is also a Native Debug VSCode extension that could be helpful.
Another solution I can think of is to use Visual Studio Online (free for small teams up to 5 persons) as build server.
As you have said, the other way around is pretty easy and nowadays even officially supported by Visual Studio 2017.
Most probably, the VS remote debugging tools for Windows wont be helpful for you.

RC File info not working across different machines

I have a Visual C++ MFC app. When I update the RC file menus via resource editor, sometimes it isn't reflected when I run the app. Other times, the updated menus work on the development machine, but not on other machines. Note: the other machines had a previous version of the software installed. I simply copied and pasted the release folder over from one machine to another. Using the Wix installer we use to install everything (AFTER UNINSTALLING FROM CONTROL PANEL) doesn't seem to work either. What I missing? How do I get my menus to behave correctly? Why do things work on some PCs and not on others?

How to check and install another software requirement before your software in installshield?

I'm doing a software that requires from OpenVPN to work, so I'm expecting that when I launch the installer checks if OpenVPN is installed and if not launch it's installer. If the install is successful then continue with the install, if not, exits.
Also, I'd like to check if O.S is 32 or 64bits in order to launch the correct installer from openvpn.
How would be the best way to do that? I've readed about custom actions, nested installations, chainers, etc... but I'm newbie in this and I don't know where to start.
I'm working with Visual Studio 2012 with Installshild plugin.
Create "BootStrap" application (.exe) and add as prerequisite, what is running before you install starts. You also can check box ( not show in prerequisite list) and you Bootstrap app will be not in PreReq,. dialog

Kernel debugging in VS 2012

I have a Kernel mode filter driver project. Host: Win8 Pro x64 running VS2012, Target:Win8 Pro x64 VM on the same machine. I was able to provision the VM through VS 2012 over the network. I deployed the package project. When I try to deploy and Install the package from VS, I am not able to succeed. So I manually installed the driver and the driver works fine. After installing the driver manually, I attach to the kernel of the VM and click on Break all. I find the Kd console in the immediate window of VS '12. I type the command "bu !DriverEntry" and then I type the "g" command. I see the message Debuggee is running. When I place break points on my code and press any key in the VM, I don't see the break points getting hit in my code. Need help!!
Use Fltmc command to load and attach your filter to a specific drive
You can put breakpoints directly in VS without the need to type in the console, if your filter is getting loaded after you type fltmc load "filter name" VS should stop at the driver entry function breakpoint, you may also need to attach it.
Dont forget to check if your debugger is working by when you click break all target machine should freeze.
I wasn't able to debug through VS. I went for a work around and this time I used a Win7 VM. Made use of the KdPrint() method and used the DebugView tool to see the messages. This is a lengthy process but atleast I'm able to debug my driver. Hope this helps someone else too

Resources