VSソフトウェアのデフォルトインストールパスの変更、CreateFileの戻り値が0 xffffffff、ファイル-Fileの処理に失敗し、持っていない.ps 1拡張子、管理者権限のあるcmdを呼び出す、正常に動作しない.exeかつ戻り値なし、bat管理者権限
7299 ワード
今回のソフトウェア整理で発生した問題の整理
1、パッケージのデフォルトのインストールパスにスペースがある場合はどうすればいいですか
パッケージのデフォルトのインストールパスは、ソリューション--パッケージアイテム(**Setup)--右クリック--view-ファイル----APplication Folder--プロパティ、DefaultLocationのデフォルトは[ProgramFiles 64 Folder][Manufacturer][ProductName]で、ProgramFiles 64 FolderのデフォルトのCディスクのprogram files.
デフォルトのインストールパスを次の形式に変更します:C:SUNG
debugディレクトリの下のファイルは以下のディレクトリにインストールされます.
2 HIDを使用csは、まずFindUSBDEvice()を使用しなければ、直接OpenDevice()を開き、存在しないデバイスを開いた後、再び存在するデバイスを開く方法を発見した.
device = CreateFile(deviceList[i], DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE, 0, 0, CREATIONDISPOSITION.OPEN_EXISTING, 0x40000000, 0);
ここでの戻り値はいずれも0 xffffffである.
したがって、デバイスを開く前に、デバイス(FindUsbDevice)が存在するかどうかを確認し、存在しないデバイスを直接開くことはできません.
他のツールはcreatefile(デバイスのプロパティ値を変更してアクセスする)と競合する可能性があります.この問題が発生すると、デバイスマネージャで読み込まれたDeviceList()でプロパティにアクセスできないデバイスが削除され、createfileというデバイスではありません.
3現象:ファイル-File"CProgram"-program fileの処理に失敗しました.ファイルがないためです.psl拡張子、有効なパスを指定してください.
ソフトウェアから1つ呼び出されました.batファイルは、ソフトウェアで正しく使用できます.ただし、ソフトウェアのインストール時にデフォルトパスで「C:Program Files」にインストール時に呼び出す.batファイルが失敗し、「C:Program」で対応するものが見つからないことを示す.ps 1ファイル.
原因:.batファイルはパスにスペースがあることを認識できません
ソリューション:上記の方法で、ソフトウェアのデフォルトのインストールパスを変更し、スペースのないパスにインストールすればいいです.
4管理者権限でcmdウィンドウを呼び出し、コマンド実行を入力できます.
先にreadmeを読み込む.txtの内容はlogに表示され、開いたcmdウィンドウで過去の実行命令をコピーできます.
使用する関数
..
5プロセスを呼び出し、実行する.exeツール.
ファイルに遭遇し、他のファイルを呼び出す.exeの場合、増加はありません
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);
p.StartInfo.Verb = "runas";
ただし、運転時に正常に動作せず、戻り値も得られないので、この2つの文を追加すればよい.
6编纂batファイルは、管理者権限の下でコマンドを実行させます.
全体batファイルのフォーマットは次のようになります.
7、管理者権限の下で実行する.batスクリプト、パラメータが相対パスのファイルである場合、プロンプトパラメータは無効です.
例:prog.exe -fw %cd%\..\Fware\Oas\fware\Factory\Oasis.ini -dest SYSTEM
ここでは%cd%を用い,決定経路を用いてパラメータを有効パラメータとした.
8、管理者権限呼び出しcmd.exe、exeファイルを実行
9、labelコントロールの背景を透明に設定し、その位置を設定します.
コントロールlabe 1を選択し、BackColorをTransparentに設定します.
コードではlabel 1.Parent=picture_Background;//ここでの背景色はUI全体の背景色である.
label.Location=new Point(12,34);//コントロールの元の属性に元の位置があるので、調整を参照してください.
..
.
1、パッケージのデフォルトのインストールパスにスペースがある場合はどうすればいいですか
パッケージのデフォルトのインストールパスは、ソリューション--パッケージアイテム(**Setup)--右クリック--view-ファイル----APplication Folder--プロパティ、DefaultLocationのデフォルトは[ProgramFiles 64 Folder][Manufacturer][ProductName]で、ProgramFiles 64 FolderのデフォルトのCディスクのprogram files.
デフォルトのインストールパスを次の形式に変更します:C:SUNG
debugディレクトリの下のファイルは以下のディレクトリにインストールされます.
C:\WINDOWS
2 HIDを使用csは、まずFindUSBDEvice()を使用しなければ、直接OpenDevice()を開き、存在しないデバイスを開いた後、再び存在するデバイスを開く方法を発見した.
device = CreateFile(deviceList[i], DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE, 0, 0, CREATIONDISPOSITION.OPEN_EXISTING, 0x40000000, 0);
ここでの戻り値はいずれも0 xffffffである.
したがって、デバイスを開く前に、デバイス(FindUsbDevice)が存在するかどうかを確認し、存在しないデバイスを直接開くことはできません.
他のツールはcreatefile(デバイスのプロパティ値を変更してアクセスする)と競合する可能性があります.この問題が発生すると、デバイスマネージャで読み込まれたDeviceList()でプロパティにアクセスできないデバイスが削除され、createfileというデバイスではありません.
// deviceList ,
for (int i = 0; i < deviceList.Count; )
{
if(deviceList[i].IndexOf("vid_****&pid_****")>-1)
{
deviceList.RemoveAt(i);
//break;
}
else
{
i++;
}
}
for (int i = 0; i < deviceList.Count; i++){...
}
3現象:ファイル-File"CProgram"-program fileの処理に失敗しました.ファイルがないためです.psl拡張子、有効なパスを指定してください.
ソフトウェアから1つ呼び出されました.batファイルは、ソフトウェアで正しく使用できます.ただし、ソフトウェアのインストール時にデフォルトパスで「C:Program Files」にインストール時に呼び出す.batファイルが失敗し、「C:Program」で対応するものが見つからないことを示す.ps 1ファイル.
原因:.batファイルはパスにスペースがあることを認識できません
ソリューション:上記の方法で、ソフトウェアのデフォルトのインストールパスを変更し、スペースのないパスにインストールすればいいです.
4管理者権限でcmdウィンドウを呼び出し、コマンド実行を入力できます.
先にreadmeを読み込む.txtの内容はlogに表示され、開いたcmdウィンドウで過去の実行命令をコピーできます.
private void button_download_Click(object sender, EventArgs e)
{
FileOperation file_opt = new FileOperation();
richTextBox1.Text += file_opt.Read(".\\readme.txt");
richTextBox1.Text += "
";
// cmd ,
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/c C:\\Windows\\System32\\cmd.exe";
startInfo.UseShellExecute = false;
startInfo.Verb = "RunAs";
Process p = new System.Diagnostics.Process();
p.StartInfo = startInfo;
p.Start();
}
使用する関数
public class FileOperation
{
public string Read(string path)
{
StreamReader sr = new StreamReader(path);
string strContent = sr.ReadToEnd();
sr.Close();
return strContent;
}
}
..
5プロセスを呼び出し、実行する.exeツール.
private void GetConID()
{
Process p = new Process();
p.StartInfo.FileName = ".\\Tool\\GConID.exe";
p.StartInfo.Arguments = "GetConID";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);
p.StartInfo.Verb = "runas";
p.StartInfo.CreateNoWindow = true;
p.Start();
string result = p.StandardOutput.ReadToEnd();
if (result=="")
{
MessageBox.Show("ContainerID is empty");
}
else
{
// conID , {} , - ,
int fir = result.IndexOf("{", 0);
int end = result.IndexOf("}", 0);
string conID = result.Substring(fir + 1, end - fir - 1);
conID = conID.Replace("-", "");
form_log.richTextBox_logout.Text += "ConID: " + conID + "
";
Number_ContainerID.Text = containerID;
}
p.WaitForExit();
p.Close();
}
ファイルに遭遇し、他のファイルを呼び出す.exeの場合、増加はありません
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(p.StartInfo.FileName);
p.StartInfo.Verb = "runas";
ただし、運転時に正常に動作せず、戻り値も得られないので、この2つの文を追加すればよい.
6编纂batファイルは、管理者権限の下でコマンドを実行させます.
全体batファイルのフォーマットは次のようになります.
cls
@echo off
title
mode con cols=100 lines=20
color 3f
::
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
echo WScript.Quit >>"%temp%\%uac%.vbs"
"%temp%\%uac%.vbs" /f
del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
:: ,
cd /d %~dp0 // /d
::echo %cd%\ //
::echo cd /d %%~dp0
Echo **Start Update**
cd prog // prog
ping -n 1 127.0.0.1 >nul // ping
ping -n 1 127.0.0.1 >nul
prog.exe -fw %cd%\..\Firmware\Oasis\firmware\Factory\Oasis.img -dest SYSTEM //
ping -n 2 127.0.0.1 >nul
cd .. //
cd tek // tek
ping -n 2 127.0.0.1 >nul
Caling.bat -BoardRev "RevA" -PresenceVid 0x04E8 -PresencePage
7、管理者権限の下で実行する.batスクリプト、パラメータが相対パスのファイルである場合、プロンプトパラメータは無効です.
例:prog.exe -fw %cd%\..\Fware\Oas\fware\Factory\Oasis.ini -dest SYSTEM
ここでは%cd%を用い,決定経路を用いてパラメータを有効パラメータとした.
8、管理者権限呼び出しcmd.exe、exeファイルを実行
cmd ,
ProcessStartInfo startInfo = new ProcessStartInfo();
//startInfo.FileName = ".\\Tools\\cleanup\\cleanup.cmd";
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/c C:\\Windows\\System32\\cmd.exe";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
//startInfo.CreateNoWindow = true;
startInfo.Verb = "RunAs";
Process p = new System.Diagnostics.Process();
p.StartInfo = startInfo;
p.Start();
p.StandardInput.WriteLine(".\\Tools\\cleanup\\cleanup.cmd");// p.StandardInput.WriteLine("exit");
p.StandardInput.AutoFlush = true;
string result = p.StandardOutput.ReadToEnd();
richTextBox_logout.Text += result + "
";
9、labelコントロールの背景を透明に設定し、その位置を設定します.
コントロールlabe 1を選択し、BackColorをTransparentに設定します.
コードではlabel 1.Parent=picture_Background;//ここでの背景色はUI全体の背景色である.
label.Location=new Point(12,34);//コントロールの元の属性に元の位置があるので、調整を参照してください.
..
.