I was able to do it
first create batch file example test.bat
and set code into
@ECHO OFF
ECHO Please Wait....
NET STOP MSSQLSERVER
NET START MSSQLSERVER /m"SQLCMD"
sqlcmd -s . -E -i query.sql
NET STOP MSSQLSERVER
NET START MSSQLSERVER
first stop sql server
and start -m parameter for start single user mode
"SQLCMD" only connect from command line in single user mode
after start single user mode execute query.sql
-s . server address here my local
-e connect windows authentication
-i sql query for execute
query.sql:
use mydatabase
Go
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'newuser') DROP login [newuser]
Go
create LOGIN newuser WITH PASSWORD = '123456',CHECK_POLICY = OFF,CHECK_EXPIRATION = OFF ;
Go
EXEC master..sp_addsrvrolemember @loginame = N'newuser', @rolename = N'sysadmin'
Go
in sql query first check if newuser exist drop then create with sysadmin role
after execute sql query stop sql server and again start normaly without parameter
now execute batch file run as administrator on with c#
var proc = new Process();
proc.StartInfo.CreateNoWindow = true; //run background
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.Verb = "runas"; //ask local admin pass when run
proc.StartInfo.FileName = "batch file address";
proc.Start();