簡體   English   中英

在Wince上使用C#靜默運行命令行程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM