我们正在运行一个Team City Build Server,并且希望编译一个Visual C ++项目。到目前为止,这很容易,因为我已经使用Windows SDK设置了Windows Build Agent,但是我们没有解决方案/项目文件。
而是使用CMake创建项目文件。CMake似乎有点笨(当未安装Visual Studio时无法生成解决方案),但是通过一些技巧,我可以做到这一点。然后可以使用MSBuild构建该解决方案。
问题来了。为了自动运行,我需要调用Windows SDK的SetEnv.cmd。而且我似乎无法自动找到它。它位于Windows SDK的bin子目录中,但是bin和root都不在路径中,并且%mssdk%
环境变量由SetEnv.cmd设置,并且事先不可用!
将Windows SDK \ bin目录添加到PATH会导致SetEnv.cmd不再起作用(退出时显示类似The x86 compilers are not currently installed
和的消息Jump target Set_x86 not found
。
开始菜单链接正在使用Windows SDK目录作为工作目录来调用SetEnv.cmd。但是,如果我将根目录添加到PATH,则Bin \ SetEnv.cmd不可用。
如何自动找到SetEnv.cmd?即使将环境变量设置为setenv.cmd的完整路径也不起作用,并且当我将%mssdk%定义为sdk目录时,则调用%mssdk%\ bin \ SetEnv也不起作用。我还尝试定义%mssdk%,然后定义cd%mssdk%,然后调用bin \ SetEnv。此外,在所有这些情况下都找不到编译器。如果我在命令行上手动cd到根目录或bin目录,然后调用SetEnv.cmd,它也将不起作用。
虽然开始菜单链接可以正常工作。
作为记录,我目前的解决方案如下:
我创建了一个MSBuild文件,该文件在命令行上使用CMake创建了解决方案文件,然后使用MSBuild任务调用了创建的解决方案。可以从TeamCity轻松构建MSBuild文件,尽管我需要一些其他技巧来满足CMake愚蠢的寻找编译器的麻烦,尽管我不会调用它。并不是很令人满意,但是可以。
在.NET 4.0应用程序(WPF)中,我们使用SHGetFileInfo
获取目录树的shell图标.由于这在某些情况下需要相当长的时间(即对于无法访问的网络驱动器或软盘驱动器),我们希望在一个线程中执行此操作,然后在读入时更新图标.
调用基本相同,现在只是在一个线程中执行.因为有人说线程必须STA
为此工作,我们使用Thread而不是ThreadPool进行测试,结果相同.使用ThreadPool
也没有用.
SHGetFileInfo
成功(返回1),但结构中的hIcon成员为零.
IntPtr GetIcon(string name)
{
Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES | Shell32.SHGFI_SMALLICON;
Shell32.SHGetFileInfo(
name, System.IO.Directory.Exists(name) ? Shell32.FILE_ATTRIBUTE_DIRECTORY : Shell32.FILE_ATTRIBUTE_NORMAL,
ref shfi,
(uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi),
flags );
return shfi.hIcon;
}
Run Code Online (Sandbox Code Playgroud)
完全相同的代码可以从GUI线程中正常工作.要使函数从单独的线程工作,或者使其在不阻塞GUI线程的情况下工作,必须做些什么?
更新:围绕这个的代码基本上是这样的:
var thread = new System.Threading.Thread(() => {
var result = GetIcon("C:\\");
// ... do something with the result
});
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
Run Code Online (Sandbox Code Playgroud)
如果只留下线程委托中的行,它可以正常工作(当然,在GUI线程上).
更新:目前,我们只是调用SHGetFileInfo
它来使其工作.这样做的好处是,原始问题(在加载所有图标之前未显示文件视图的页面)已经解决,但这意味着页面会挂起每个图标.但至少用户现在看到了一些事情正在发生.我们仍在寻找问题的实际解决方案.
有没有人知道一个Windows窗体控件,就像浏览器的地址栏?
它就像一个文本框,但在右边有一个下拉菜单,显示以前输入的文本的历史记录.
非常感谢!
我目前正处于一个新项目的准备阶段,该项目将使用.NET Compact Framework(我们将看到2.0或3.5)开发,并将在自定义Windows CE 6硬件上运行。但是,有一件事我无法上班:
似乎只有使用物理设备或仿真器才能进行调试。但是,当我仅从资源管理器启动该应用程序时,它可以在我的桌面上愉快地运行(因为CF当然是安装在我的开发计算机上的。因此,实际的问题是:
如何使用在台式机CF框架上运行的应用程序在台式机系统上调试.NET CF应用程序?还是不可能?如果是后者,我应该怎么做?创建非CF项目进行调试?我知道我应该在设备上调试,这对于应用程序的后端至关重要,但是GUI可以在桌面上调试。由于它使用的是OpenGL,因此它的运行速度比仿真器快得多(设备具有OpenGL加速功能)。
我需要做两件事:运行批处理文件(工作正常),并运行命令(不起作用).该命令的方法抛出异常'file not found'.如果我打开一个cmd窗口,并键入命令,它可以正常工作.
private static void Rescan()
{
//System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("DEVCON ReScan");
//psi.RedirectStandardOutput = true;
//psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//psi.UseShellExecute = false;
//System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "DEVCON ReScan";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
System.IO.StreamReader myOutput = proc.StandardOutput;
proc.WaitForExit(4000);
if (proc.HasExited)
{
string output = myOutput.ReadToEnd();
FileIO.WriteLog(_writePath, output);
}
}
Run Code Online (Sandbox Code Playgroud)
注释的代码也会抛出相同的异常.
好吧,我不是MSBUILD最好的.实际上,我什么都不知道.我需要一些帮助来配置我的解决方案文件,以告诉MSbuild将已编译的输出复制到暂存区域.该解决方案有大约35个项目.我需要的只是其中5个要在发布模式下复制到暂存文件夹.请假设我什么都不知道......
谢谢
有没有办法在运行安装程序时从PascalScript访问文件列表([Files]部分中的条目)?我们试图直接从设置中运行应用程序,而不是必须安装它,这样可以更容易地维护文件列表.
友
我想将以下代码集成到主应用程序代码中.填充了o/p字符串的垃圾字符转储应用程序以下代码snipette不起作用..
void stringCheck(char*);
int main()
{
char some_str[] = "Common Application FE LBS Serverr is down";
stringCheck(some_str);
}
void stringCheck(char * newString)
{
for(int i=0;i<strlen(newString);i++)
{
if ((int)newString[i] >128)
{
TRACE(" JUNK Characters in Application Error message FROM DCE IS = "<<(char)newString[i]<<"++++++"<<(int)newString[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我更好的方法来找到字符串中的垃圾字符..
非常感谢
.net ×2
c# ×2
msbuild ×2
windows ×2
.net-4.0 ×1
batch-file ×1
c++ ×1
command-line ×1
debugging ×1
edit ×1
history ×1
inno-setup ×1
maximize ×1
mfc ×1
pascalscript ×1
sdi ×1
sdk ×1
setenv ×1
shell32 ×1
textbox ×1
visual-c++ ×1
windows-ce ×1
winforms ×1