How to run AutoIt script file (.au3) from C#? - c#

I've been trying to run an AutoIt script file (.au3) from my WPF application. It does not throw any error but does not work.
AutoItX.Run("test.au3", #"C:\Folder\",1);
But it works well with below line.
AutoItX.Run("calc.exe","",1);

C# solution I have :
//switch vpn
Console.WriteLine("Refreshing VPN");
Process process = new Process();
process.StartInfo.FileName = #"C:\Program Files (x86)\AutoIt3\AutoIt3.exe";
process.StartInfo.Arguments = " \"" + Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "RandomConnectProtonVpn.au3") + "\"";
process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

AutoItX does not have the capability of running AutoIt scripts. To do that, you need to use the AutoIt interpreter, e.g. like:
AutoItX.Run(#"""C:\Program Files (x86)\AutoIt3\AutoIt3.exe"" /AutoIt3ExecuteScript test.au3", #"C:\Folder\", 1);
Also see my answer here: how can I call AutoIT UDF within Java

I solved it by compiling the script into an .exe
(right click and compile with options and then choose .exe and compile.
using System.Diagnostics;
Process.Start("path");
Example:
Process.Start("C:\\Users\\YourUserName\\Downloads\\hello.exe");

Related

Is it Possible to Run a C# project using Another c# project

is it possible to run a C# project Already build using another project? there is any way to invoke the c# execution using a c# Code.
In here I need to execute the Already Compile Project inside a another project.
You can run an exe using Process.Start
ProcessStartInfo ps = new ProcessStartInfo("YourExecutable.exe", "any arguments");
ps.WindowStyle = ProcessWindowStyle.Hidden; // or exclude this line to show it
ps.CreateNoWindow = true; // and this line
ps.UseShellExecute = false;
Process process = new Process();
process.StartInfo = ps;
process.Start();
There are additional ways to get the output of your process for displaying or logging but that is easily searchable.

SSH Not Found On Cmd Session Started From C# Program

When I launch cmd.exe from a C# Program in Visual Studio, I get an error saying 'ssh is not an internal or external program' but when I launch cmd via Win + R -> cmd.exe, there is no problem. I checked the PATH variable and its identical in both. What could cause this weird behaviour?
Code:
Process process = new Process();
process.StartInfo.FileName = "CMD.exe";
process.StartInfo.Arguments = "/C ssh user#123.456.789.0";
process.Start();
The problem was the build configuration, making it x64 instead of "Any CPU" solved the problem. See comments for more detail.

C# start Child Process (in CMD window) as Administrator with custom environment variables

I have a program which wraps around some Windows SDK executables and opens them in a separate CMD window.
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C signtool.exe [args] & pause";
process.StartInfo.Verb = "runas";
process.Start();
Right now, I have the Windows SDK folder added to my system's Path environment variable. Is there a way to programmatically add the Windows SDK folder to the Path environment variable of the user OR run the process with the SDK folder added to the Path variable of that particular CMD window?
This is the folder I need added to each CMD window's Path variable:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86
This sub-process must run as administrator. It does not need to receive the output of the child process.
Use a ProcessStartInfo and its Environment property instance to set this up.
var startInfo = new ProcessStartInfo();
var defaultPath = startInfo.Environment["PATH"];
var newPath = "C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.16299.0\\x86" + ";" + defaultPath;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/c set > D:\\env.txt";
startInfo.Verb = "runas";
startInfo.Environment["PATH"] = newPath;
startInfo.UseShellExecute = false; // required to use Environment variables
Process.Start(startInfo);
There are a number of hurdles to overcome here.
As you've discovered, the Environment and EnvironmentVariables properties of ProcessStartInfo cannot be used when UseShellExecute is true (an exception is thrown). But Verb only works when UseShellExecute is false (the Verb is silently ignored). This comes down to the differences between CreateProcess (the core Win32 function) and ShellExecute/ShellExecuteEx (the shell function).
As another commenter suggested, you might try setting the environment in the parent process and then starting the child process. However, elevated processes don't inherit the environment from a non-elevated parent process.
I would be willing to bet that there is a way to do what you want using a correct series of Win32 calls to get an elevated token and then calling something like CreateProcessAsUser. I am also willing to bet it'll be a little error-prone and ugly in C# because of the necessary struct marshaling. So instead of trying to figure that out for you, I'll offer another suggestion:
Just programmatically write a batch script that sets the environment and invokes signtool.exe. You can then invoke that batch script using the runas verb as you're currently doing.

Guidance for invoking .jar file through asp.net code

ProcessStartInfo psi = new ProcessStartInfo("java.exe", " -jar \"C:\\craFVUsubsreg-lite_APY.jar\"");
psi.UseShellExecute = false;
Process p = new Process();
p.StartInfo = psi;
p.Start();
I want to invoke the utility tool, which is of java.jar file within the "c#" [mvc] application and it is work fine when i run the application through code. However after i published the application and then i try to invoke the same jar file it is not responding or i can say it is not working.
Above is the process code which i'm using to invoke the jar file. Even the user permission i have setted to full control mode.
Kindly guide me, where i am wrong, or is their any way to directly invoke the java.jar file without converting to java.exe.

svn check out using C# program

I am writing a small utility to execute svn commands using c# program
Here is the key line in my program
System.Diagnostics.Process.Start("CMD.exe", #"svn checkout C:\TestBuildDevelopment\Code");
As I assume, the above code should be able to do svn check out and download all the code to the local path mentioned above. But what's happening is that, the command prompt opens up with the default path of the c# project and does nothing.
If I run this svn command in command line it works fine. But when I run using C# it just pops up the command prompt without executing the svn checkout operation. Any idea on what is going wrong?
You don t have to run CMD.exe. CMD.exe ist just a program that calls other assemblies.
You can call svn.exe directly with your argument checkout ... (but isnt there a url missing?)
Process.Start("svn.exe", #"checkout C:\TestBuildDevelopment\Code");
you may also try this:
Process proc = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.RedirectStandardOutput = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "svn.exe";
startInfo.CreateNoWindow = true;
startInfo.Arguments = "checkout ...";
proc.StartInfo = startInfo;
if(proc.Start()) {
proc.WaitForExit();
}
You need to add the parameter /c. Try:
Process.Start("CMD.exe", #"/c svn checkout C:\TestBuildDevelopment\Code");
The parameter /c means that the cmd should execute the command and exit.
As Jon notes, svnsharp would be a good choice here; but IMO the problem is shelling cmd.exe, rather than the exe you actually want to run:
Process.Start(#"path\to\svn.exe", #"checkout ""C:\TestBuildDevelopment\Code""");
although a ProcessStartInfo would make it easier to set the working path etc.

Categories

Resources