[英]Run command line program silently with c# on wince
我再次需要幫助。
我正在使用.net Compact Framework和編程語言C#為運行WinCE 5.0的移動設備開發。
我要完成的是以編程方式安裝網絡驅動器。 為此,該應用程序在后台線程中運行以下代碼:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "net";
startInfo.UseShellExecute = false;
startInfo.Arguments = @"use logs \\server\logs /user:dom\uname /password:pw";
Process p = Process.Start(startInfo);
p.WaitForExit(5000);
現在我的問題是,此代碼將在前台顯示一個控制台,並將命令寫入命令以及命令的答案。 另外,控制台也不會消失。
參數“ UseShellExecute”似乎沒有顯示任何效果。
我已經讀過有關參數'CreateNoWindow'的信息,但在緊湊型框架中不存在。
因此,人們有可能在后台運行net命令,用戶不會注意到,當然也不會看到包含純文本密碼的命令。
希望您能明白。
提前謝謝了
托比
非常感謝Shaihi,您使我步入正軌。
您提供的代碼和鏈接最終使我了解了適合我的以下解決方案:
[DllImport("coredll.dll")]
private static extern int WNetAddConnection3(IntPtr hWndOwner,
ref NetResource lpNetResource, string lpPassword, string lpUserName, int dwFlags);
[DllImport("coredll.dll")]
static extern int WNetCancelConnection2(string lpName, Int32 dwFlags, bool bForce);
...
try
{
NetResource logsResource = new NetResource();
logsResource.lpLocalName = "logs";
logsResource.lpRemoteName = @"\\server\logs";
logsResource.dwType = 0x1; //const int RESOURCETYPE_DISK = 0x1
logsResource.dwScope = 0;
logsResource.dwUsage = 0;
logsResource.dwDisplayType = 0;
//try to connect the network resource
WNetAddConnection3(new IntPtr(0), ref logsResource, @"pass", @"dom\user", 0);
//copy files to the server
string[] logfiles = Directory.GetFiles(@"\System\Logs\");
foreach (string logfile in logfiles)
{
File.Copy(logfile, @"\network\logs\" +
logfile.Substring(logfile.LastIndexOf(@"\") + 1), true);
}
}
catch
{
}
finally
{
//try to disconnect network resource
WNetCancelConnection2("logs", 0, false);
}
兩個WNET函數調用返回一個整數值。 如果該值等於0,則操作成功完成。 我遇到的常見代碼是53和85。請參閱此列表以了解數字的含義!
創建一個Windows窗體應用程序而不是控制台應用程序, 並將 program.cs的Main方法中的所有代碼替換為
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "net";
startInfo.UseShellExecute = false;
startInfo.Arguments = @"use logs \\server\logs /user:dom\uname /password:pw";
Process p = Process.Start(startInfo);
p.WaitForExit(5000);
刪除Form1.cs
您可以通過P /調用WNetAddConnetion3來使用它( 這是聲明)。這是NetResource結構的聲明:
[StructLayout(LayoutKind.Sequential)]
internal struct NetResource
{
public uint dwScope;
public uint dwType;
public uint dwDisplayType;
public uint dwUsage;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
public string lpLocalName;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
public string lpRemoteName;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
public string lpComment;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
public string lpProvider;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.